ViewPager禁止滑动效果实现

写在前面

项目刚开始的时候,PM:你这个不用滑动,太花哨。。。
我:现在主流的app,一般都能滑动的,这样也比较符合用户习惯…
现在,PM:你这个怎么不能滑动啊,不符合用户需求啊,赶紧改了。。。
我:…

不管怎样,写都写了,还是扔出来大家看看

重写ViewPager的方法

我使用的是ViewPager+FragmentPagerAdapter

禁止滑动效果,挺简单的,就重写一下ViewPager的方法就可以了。

先定义一个boolean的值进行标记,是否允许滑动。

// 是否滑动,用来标记
    private boolean isCanScroll = true;

在继承它的子类中设置是否允许滑动

    public void setCanScroll(boolean canScroll) {
        isCanScroll = canScroll;
    }

重写ViewPager的拦截方法,这是一个拦截方法,用于事件的处理,可以改变事件的传递方向,它决定了Touch事件是否向下子控件传递。

如果返回了false,就不拦截,传递给子控件
如果返回了true,就会拦截,由自己的onTouchEvent处理

super.onInterceptTouchEvent(ev),默认就是return true。

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return isCanScroll && super.onInterceptTouchEvent(ev);
    }

重写ViewPager的处理方法,这个方法决定了当前控件是否消费了这个事件

如果返回false,就是没有消费,会一层层的向上传。
如果返回true,就表示被消费了,事件到此结束了。

super.onTouchEvent(ev),默认返回的是false。

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return isCanScroll && super.onTouchEvent(ev);
    }

使用

在要使用ViewPager的Activity里

// 使用CustomViewPager 继承ViewPager
    private CustomViewPager container;

在onCreate方法中

// 禁止左右滑动
        container.setCanScroll(false);

在布局文件.xml中

<!-- 禁用滑动导航菜单页 -->
    <com.巴拉巴拉.common.view.CustomViewPager
        android:id="@+id/containerVP"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

通过上面的步骤,就可以禁止ViewPager的左右滑动效果了。

Ps:
关于Android的onInterceptTouchEvent()和onTouchEvent(),这位老哥的博客写的挺细的。
拦截和处理方法详解

重写文件下载地址

猜你喜欢

转载自blog.csdn.net/A_Intelligence/article/details/85164757
今日推荐