继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

禁止滑动的NoScrollViewPager

拉丁的传说
关注TA
已关注
手记 448
粉丝 126
获赞 788

大家经常会使用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

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP