ViewPager随手势左滑退出

来源:互联网 发布:法棍 知乎 编辑:程序博客网 时间:2024/06/11 06:01

页面随手势左滑退出,ViewPager本身有滑动事件,要想ViewPager也实现随手势滑动退出,需要对ViewPager的事件动些手脚。

看代码,控制ViewPager的上下左右滑动,喜欢拿去。

/** * Auther:  winds * Data:    2017/4/27 * Desc:    控制ViewPager的上下左右滑动 */public class SolveViewPager extends ViewPager {    int startX;    int startY;    boolean updowneable = false;   //上下滑动事件是否需要父控件拦截    默认不需要 false    boolean leftable = true;       //向左滑动事件  默认需要true    boolean rightable = true;      //向右滑动事件  默认需要true    public SolveViewPager(Context context) {        super(context);    }    public SolveViewPager(Context context, AttributeSet attrs) {        super(context, attrs);    }    /**     * 事件分发, 请求父控件是否拦截事件     * 1. 右划, 而且是第一个页面, 需要父控件拦截     * 2. 左划, 而且是最后一个页面, 需要父控件拦截     * 3. 上下滑动, 不需要父控件拦截     */    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                getParent().requestDisallowInterceptTouchEvent(true);// 不要拦截,                // 这样是为了保证ACTION_MOVE调用                startX = (int) ev.getRawX();                startY = (int) ev.getRawY();                break;            case MotionEvent.ACTION_MOVE:                int endX = (int) ev.getRawX();                int endY = (int) ev.getRawY();                if (Math.abs(endX - startX) > Math.abs(endY - startY)) {// 左右滑动                    if (endX > startX) {// 右划                        if (getCurrentItem() == 0) {// 第一个页面, 需要父控件拦截                            getParent().requestDisallowInterceptTouchEvent(!rightable);                        }                    } else {// 左划                        if (getCurrentItem() == getAdapter().getCount() - 1) {// 最后一个页面,                            // 需要拦截                            getParent().requestDisallowInterceptTouchEvent(!leftable);                        }                    }                } else {// 上下滑动                    getParent().requestDisallowInterceptTouchEvent(!updowneable); //不需要父控件拦截                }                break;        }        return super.dispatchTouchEvent(ev);    }}


其实,解决RecyclerView下拉刷新和Banner的滑动冲突,也是同样的思路。


原创粉丝点击