为了账号安全,请及时绑定邮箱和手机立即绑定

禁止滑动的NoScrollViewPager

标签:
Android

大家经常会使用ViewPager+Fragment,然后在fragment中会有左右滑动的view,当view滑动到最右边时会自动滑到viewpager的下一个item,如果项目要求ViewPager禁止自动滑动,这自定义的ViewPager就对你有用了!

public class NoScrollViewPager extends ViewPager {

private boolean noScroll = false;public NoScrollViewPager(Context context, AttributeSet attrs) {    super(context, attrs);
}public NoScrollViewPager(Context context) {    super(context);
}public void setNoScroll(boolean noScroll) {    this.noScroll = noScroll;
}@Overridepublic void scrollTo(int x, int y) {    super.scrollTo(x, y);
}@Overridepublic boolean onTouchEvent(MotionEvent arg0) {    if (noScroll)        return false;    else
        return super.onTouchEvent(arg0);
}@Overridepublic boolean onInterceptTouchEvent(MotionEvent arg0) {    if (noScroll)        return false;    else
        return super.onInterceptTouchEvent(arg0);
}@Overridepublic void setCurrentItem(int item, boolean smoothScroll) {    super.setCurrentItem(item, smoothScroll);
}@Overridepublic void setCurrentItem(int item) {    super.setCurrentItem(item);
}

}

用法 在xml中引入,在activity中viewpager.setNoScroll(true);就行了

其实就是处理了一下点击事件,
public boolean onInterceptTouchEvent(MotionEvent ev) 
该方法用户拦截被传递过来的事件,用于判断被传递过来的事件是否需要被当前的view进行处理。

 return false : 不对事件进行拦截,放行该事件。事件会被传递到当前view的子控件中,由子控件中的dispatchTouchEvent方法进行分发处理。 return true : 拦截该事件,将该事件交给当前view的onTouchEvent方法进行处理。 return super.inInterceptTouchEvent(ev):默认拦截方式,和return true一样。该事件会被拦截,将该事件交给当前view的onTouchEvent方法进行处理。

我的理解是NoScrollViewPager中的onInterceptTouchEvent方法返回了了false,则没有消费此事件,会想下传递,但是他又没有子View了!!!
我也就个人理解,,欢迎大家指正!

原文链接:http://www.apkbus.com/blog-842132-76752.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消