有时候我们需要禁用viewpager的左右滑动功能,但是viewpager本身并没有提供相关的API,这个时候就需要自定义viewpager来实现了。
定义ViewPager
首先需要定义一个ViewPager,继承自ViewPager,取名ScrollViewPager,重写onTouchEvent事件。内部定义一个是否可以滑动的属性noScroll,这个属性用于在onTouchEvent事件中对事件进行拦截处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class ScrollViewPager extends ViewPager { //是否可以滑动 public boolean noScroll; public ScrollViewPager(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); //从自定义属性中获取是否可以滑动 TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.ScrollViewPager); noScroll=array.getBoolean(R.styleable.ScrollViewPager_noScroll,false); } @Override public boolean onTouchEvent(MotionEvent ev) { //注意一下这里的逻辑,判断条件和return的值要相反。 if (noScroll){ return false; } return super.onTouchEvent(ev); } } |
自定义属性
新建attr文件,定义是否可以滑动的属性noScroll,类型为boolean
1 2 3 4 5 | <resources> <declare-styleable name="ScrollViewPager"> <attr name="noScroll" format="boolean"/> </declare-styleable> </resources> |
最后在资源文件中使用自定义的ScrollViewPager即可。