Android(安卓)实现让ViewPager禁止滑动
16lz
2021-01-26
应用场景这里就不说了,实现原理就是自定义一个ViewPager,重写onTouchEvent()onInterceptTouchEvent()方法,判断是否要滑动,然后对外提供两个方法,一个设置是否可以滑动,一个是获取当前是否可以滑动,为了方便开发,最后自定义了一个属性,下面我直接上代码
.Java文件
//** * 可禁止滑动的ViewPager */public class CanBanScrollViewPager extends ViewPager { private boolean isCanScroll;/*是否可以滑动*/ public CanBanScrollViewPager(Context context) { super(context); } public CanBanScrollViewPager(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CanBanScrollViewPager); /*获取布局中设置的属性*/ isCanScroll = a.getBoolean(R.styleable.CanBanScrollViewPager_isScroll, false); a.recycle(); } public void setCanScroll(boolean isCanScroll) { /*对外公开的方法,设置是否可以滑动*/ this.isCanScroll = isCanScroll; } public boolean isCanScroll() { /*对外公开的方法,获取当前是否可以滑动*/ return isCanScroll; } @Override public boolean onTouchEvent(MotionEvent ev) { /*重写此方法,判断当前是否可以滑动,如果可以,正常调用父类的方法,该干嘛干嘛!如果不可以滑动,直接返回false,不做任何触摸事件的处理*/ if (isCanScroll()) { return super.onTouchEvent(ev); } return false; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { /*这里意思和上面的重写方法差不多,不多解释*/ if (isCanScroll()) { return super.onInterceptTouchEvent(ev); } return false; }}
attrs.xml
"CanBanScrollViewPager"> "isScroll" format="boolean" /> </declare-styleable>
layout.xml >用到自定义属性时记得一定要加命名空间,否则无法使用自定义属性
CanBanScrollViewPagerxmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:isScroll="false" />
更多相关文章
- Android(安卓)4.0 系统语言预设问题
- [置顶] activity配置信息详解
- android Java StringBuffer对象的append方法
- Android中ImageView使用网络图片资源的方法
- Android定时器之Handler的postDelyed方法
- Android(安卓)View之基础介绍(Android开发艺术探索)
- android 预装第三方apk的方法
- unity3d android真机测试的2种方法
- Android(安卓)CTS测试修改测试结果和调试方法