android viewpager 滑动方法,Android中Viewpager禁止滑动的实现

前言

现在很多app,首页不允许滑动切换(因为页面加载吧),但是又用viewpage来管理frgament.因为方便嘛.

以前在网上找的例子:

public class NoScrollViewPager extends ViewPager {

public NoScrollViewPager(Context context, AttributeSet attrs) {

super(context, attrs);

}

public NoScrollViewPager(Context context) {

super(context);

}

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

//不拦截,否则子孩子都无法收到事件,一般这个自定义的时候都不作处理

return super.dispatchTouchEvent(ev);

}

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

return super.onInterceptTouchEvent(ev);

}

@Override

public boolean onTouchEvent(MotionEvent ev) {

return true;

}

这个自定义如果继承的Viewpager是低版本的,那么是没问题的.

但是如果你编译时用是高版本的api,5.0以后吧.上面这个自定义就会失效,

你会发现,会有细微的滑动.还是能滑动的

判断老的还是新的,看setOnPageChangeListener就知道了

最新的Viewpager里面这个方法已经废弃了,改成addOnPageChangeListener()了.

由于之前改viewpager做懒加载.一直保留了一个老版本的Viewpager使用.直到最近才发现.

改进后

public class NoScrollViewPager extends ViewPager {

private boolean isScroll;

public NoScrollViewPager(Context context,AttributeSetattrs{

super(context, attrs);

}

public NoScrollViewPager(Context context) {

super(context);

}

/**

* 1.dispatchTouchEvent一般情况不做处理

*,如果修改了默认的返回值,子孩子都无法收到事件

*/

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

return super.dispatchTouchEvent(ev); // return true;不行

}

/**

* 是否拦截

* 拦截:会走到自己的onTouchEvent方法里面来

* 不拦截:事件传递给子孩子

*/

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

// return false;//可行,不拦截事件,

// return true;//不行,孩子无法处理事件

//return super.onInterceptTouchEvent(ev);//不行,会有细微移动

if (isScroll){

return super.onInterceptTouchEvent(ev);

}else{

return false;

}

}

/**

* 是否消费事件

* 消费:事件就结束

* 不消费:往父控件传

*/

@Override

public boolean onTouchEvent(MotionEvent ev) {

//return false;// 可行,不消费,传给父控件

//return true;// 可行,消费,拦截事件

//super.onTouchEvent(ev); //不行,

//虽然onInterceptTouchEvent中拦截了,

//但是如果viewpage里面子控件不是viewgroup,还是会调用这个方法.

if (isScroll){

return super.onTouchEvent(ev);

}else {

return true;// 可行,消费,拦截事件

}

}

public void setScroll(boolean scroll) {

isScroll = scroll;

}

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值