今天做一个项目时,需要对ViewPager的滑动进行控制,而原生的没有这个方法,所有需要重写方法实现该功能
第一:自定义MyViewPager来继承ViewPager;
第二:重写OnTouchEvent方法;
第三:重写scrollTo方法;
}MyViewPager viewPager = new MyViewPager(context);viewPager.setAdapter(new PagerAdapter() {
viewPager.setIsCanScroll(false);
viewPager.setIsCanScroll(true);
public class MyViewPager extends ViewPager {
//定义一个布尔变量来控制是否允许滑动,该变量的set方法就直接决定了该viewpager是否可以滑动
private boolean isCanScroll = true;
private Context context;
public MyViewPager(Context context) {
super(context);
this.context = context;
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (isCanScroll) {
//允许滑动则应该调用父类的方法
return super.onTouchEvent(ev);
} else {
//禁止滑动则不做任何操作,直接返回true即可
Toast.makeText(context,"what are you 弄啥嘞?",Toast.LENGTH_SHORT).show();
return true;
}
}
@Override
public void scrollTo(int x, int y) {
/**
*必须这样重写,否则会出现画面"一半,一半"的现象,根据Debug来分析可能是虽然onTouchEvent方法返回了true
*但是依然在返回true前,viewpager开始调用了scrollTo方法,导致画面"拖出来一点"
*/
if (isCanScroll) {
//只有允许滑动的时候才调用滑动的方法
super.scrollTo(x, y);
}
}
//设置是否允许滑动,true是可以滑动,false是禁止滑动
public void setIsCanScroll(boolean isCanScroll) {
this.isCanScroll = isCanScroll;
}
}