最近做项目用到ViewPager,由于需求要禁止页面左右滑动,网上搜了一些资料之后,总结了下,解决方案如下:
重写ViewPager,覆写ViewPager中的两个个方法onInterceptTouchEvent(MotionEvent arg0)方法和onTouchEvent(MotionEvent arg0)方法,让两个方法的返回值均为false即可,这样一来ViewPager就不会消耗掉手指滑动的事件了,转而传递给上层View去处理或者该事件就直接终止了,从而,左右滑动的动作触发时间失效。
关于onInterceptTouchEvent和onTouchEvent方法深入理解可参考点击打开链接
重写ViewPager:
package com.example.gis.initviewpager;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
class InitViewPager extends ViewPager {
public InitViewPager(Context context) {
super(context);
}
public InitViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent arg0) {
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
return false;
}
然后相应xml改动:
<com.example.gis.initviewpager.InitViewPager
android:id="@+id/tabpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
</com.example.gis.initviewpager.InitViewPager>
要解决点击选项卡切换多页闪烁的问题,只要在原来的基础上在加上两段代码即可。
public void setCurrentItem(int item, boolean smoothScroll) {
// TODO Auto-generated method stub
super.setCurrentItem(item, smoothScroll);
}
@Override
public void setCurrentItem(int item) {
// TODO Auto-generated method stub
super.setCurrentItem(item, false);//<span style="color: rgb(70, 70, 70); font-family: 'Microsoft YaHei', 'Helvetica Neue', SimSun; font-size: 14px; line-height: 21px; background-color: rgb(188, 211, 229);">表示切换的时候,不需要切换时间。</span>
}
本文介绍了一种通过重写ViewPager并覆盖onTouchEvent和onInterceptTouchEvent方法来禁用页面滑动的方法。此外,还提供了避免点击选项卡时页面闪烁的解决方案。

2538

被折叠的 条评论
为什么被折叠?



