ViewPager小细节

来源:互联网 发布:手机桌面优化软件 编辑:程序博客网 时间:2024/06/18 18:18

ViewPager禁用滑动

注:内容参考自他处。


ViewPager禁用手势滑动

实现原理:重写ViewPager的OnInterceptTouchEvent和OnTouchEvent方法,均返回false,不拦截事件也不处理子view未处理事件

import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;public class CustomViewPager extends ViewPager {    private boolean isPagingEnabled = false;    public CustomViewPager(Context context) {        super(context);    }    public CustomViewPager(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    public boolean onTouchEvent(MotionEvent event) {        return this.isPagingEnabled && super.onTouchEvent(event);    }    @Override    public boolean onInterceptTouchEvent(MotionEvent event) {        return this.isPagingEnabled && super.onInterceptTouchEvent(event);    }    public void setPagingEnabled(boolean b) {        this.isPagingEnabled = b;    }}

ViewPager禁用切换滑动

实现原理:重写Scroller的startScroll方法,将startScroll的duration设为0,用反射替换ViewPager的scroller

第一步:重写scroller

import android.content.Context;import android.view.animation.Interpolator;import android.widget.Scroller;public class FixedSpeedScroller extends Scroller {    private int mDuration = 0;    public FixedSpeedScroller(Context context) {        super(context);    }    public FixedSpeedScroller(Context context, Interpolator interpolator) {        super(context, interpolator);    }    public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {        super(context, interpolator, flywheel);    }    public void setDuration(int duration)    {        this.mDuration = duration;    }    @Override    public void startScroll(int startX, int startY, int dx, int dy, int duration) {        super.startScroll(startX, startY, dx, dy, mDuration);    }    @Override    public void startScroll(int startX, int startY, int dx, int dy) {        super.startScroll(startX, startY, dx, dy, mDuration);    }}    `

第二步:反射替换scroller

private void setViewPagerScrollSpeed( ){        try {            Field mScroller = null;            mScroller = ViewPager.class.getDeclaredField("mScroller");            mScroller.setAccessible(true);            FixedSpeedScroller scroller = new FixedSpeedScroller( mViewPager.getContext( ) );            mScroller.set( mViewPager, scroller);        }catch(NoSuchFieldException e){            e.printStackTrace();        }catch (IllegalArgumentException e){            e.printStackTrace();        }catch (IllegalAccessException e){            e.printStackTrace();        }    }
0 0
原创粉丝点击