2017-04-03 47 views
1

我有一个创建的自定义viewpager,我希望用户只能从屏幕的一部分刷卡和更改页面。ViewPager:只从特定视图滑动

每个页面底部都有一个线性布局,并带有一些文本,我只想从那里滑动,而不是从屏幕上滑动。

这可能吗?

这是我的自定义viewpager类:

public class MyViewPager extends ViewPager { 

    private boolean mSwipable = true; 

    public MyViewPager(Context context) { 
     super(context); 
    } 

    public MyViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     return mSwipable ? super.onInterceptTouchEvent(event) : false; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return mSwipable ? super.onTouchEvent(event) : false; 
    } 

    public boolean isSwipable() { 
     return mSwipable; 
    } 

    public void setSwipable(boolean swipable) { 
     mSwipable = swipable; 
    } 
} 

,这是一个页面视图:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white" 
    android:clipChildren="false" 
    android:clipToPadding="false" 
    android:fillViewport="true" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:showIn="@layout/fragment_search"> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/bottomLayout" 
     android:layout_marginBottom="@dimen/bottom_bar_height"> 

     //show some stuff here 


    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/bottomMenu" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/bottom_bar_height" 
     android:layout_alignParentBottom="true" 
     android:layout_gravity="bottom" 
     android:orientation="horizontal"> 

     // this is my footer, where i need to change the pages by swipe 
    </LinearLayout> 
</RelativeLayout> 
+0

使您的viewpager与您的底部线性布局具有相同的大小,因此您只能从那里滚动,然后放置一个framelayout并在您滑动viewpager时更改碎片。我不认为你可以处理滑动事件只能在de pager内部的某些视图中工作。 –

回答

0

关注这个问题,以便能够禁止随意刷卡How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?

并将其与您的SliderAdapter结合使用,以控制哪些页面可以滑动或不滑动。

如果你按照上面的链接,在你的ViewPager的子类,你可以在onTouchEvent(MotionEvent event)添加一些GestureDetector和与事件给它,就像Android: How to handle right to left swipe gestures

通过这样做,你现在会有一些onSwipeRight和管理有您的逻辑,向适配器委派该页面是否应该被刷卡或者下一步要去的问题。

+0

我在描述中添加的自定义viewpager不可滑动 –

+0

ok,然后根据需要为内部视图添加滑动侦听器。 – Darish