写在前面
项目刚开始的时候,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(),这位老哥的博客写的挺细的。
拦截和处理方法详解