ViewPager:仅从特定视图滑动

时间:2017-04-03 17:42:40

标签: android android-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>

1 个答案:

答案 0 :(得分: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并管理您的逻辑,如果页面应该被刷卡,或者下一步去哪里,请向适配器委派问题。