ViewPage判断左右滑动

来源:互联网 发布:ed是什么软件 编辑:程序博客网 时间:2024/05/24 04:34

自定义ViewPager


package com.view.pager;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;/** * 自定义ViewPager */public class CustomViewPager extends ViewPager {    private boolean isLeft = false; // 判断是否滑向左边    private boolean isRight = false; // 判断是否滑向右边    private boolean isScrolling = false; // 判断是否滑动中    private int lastValue = -1; // 最后的位置    private SlideCallback sCallback; // 滑动回调    public CustomViewPager(Context context) {        super(context);        this.setOnPageChangeListener(pcListener);    }    public CustomViewPager(Context context, AttributeSet attrs) {        super(context, attrs);        this.setOnPageChangeListener(pcListener);    }    /**     * 滑动回调     */    public interface SlideCallback {        /**         * 切换视图         * @param left         * @param right         */        public void changeView(boolean left, boolean right);        public void getCurrentPageIndex(int index);    }    public void setsCallback(SlideCallback sCallback) {        this.sCallback = sCallback;    }    /**     * 滑动改变事件     */    protected OnPageChangeListener pcListener = new OnPageChangeListener() {        @Override        public void onPageSelected(int pos) {            // 如果事件不为null            if (sCallback != null) {                // 则调用ViewPager改变方法 (更新当前View)                sCallback.getCurrentPageIndex(pos);            }        }        @Override        public void onPageScrolled(int pos, float arg1, int arg2) {            //pos :当前页面,及你点击滑动的页面            //arg1:当前页面偏移的百分比            //arg2:当前页面偏移的像素位置            if (isScrolling) {                if (lastValue > arg2) {                    // 递减,向右侧滑动                    isRight = true;                    isLeft = false;                } else if (lastValue < arg2) {                    // 递减,向右侧滑动                    isRight = false;                    isLeft = true;                } else if (lastValue == arg2) {                    isRight = isLeft = false;                }            }            lastValue = arg2;        }        @Override        public void onPageScrollStateChanged(int state) {            // 有三种状态(0,1,2)。            // state == 0 表示什么都没做。            // state == 1 表示正在滑动            // state == 2 表示滑动完毕了            if (state == 1) {                isScrolling = true;            } else {                isScrolling = false;            }            if (state == 2) {                if (sCallback != null) {                    sCallback.changeView(isLeft, isRight);                }                isRight = isLeft = false;            }        }    };}

具体使用


// CustomViewPager c_vp = (CustomViewPager) this.findViewById(R.id.c_vp);// c_vp.setAdapter(new ViewPagerAdapter());// c_vp.setsCallback(sCallback);    final String TAG = "TAG";    SlideCallback sCallback = new SlideCallback() {        boolean isLeft = false;        boolean isRight = false;        @Override        public void getCurrentPageIndex(int index) {            // Log.e(TAG,"当前索引:" + index);            // 防止没有改变,轻轻滑动,没有改变PageIndex,但是触发了滑动方法            // Log.e(TAG,isLeft + "----" + isRight + "-----" + c_vp.getCurrentItem());            if(isLeft && !isRight){                Log.e(TAG,"左滑");            } else if (isRight && !isLeft){                Log.e(TAG,"右滑");            }        }        @Override        public void changeView(boolean isLeft, boolean isRight) {            this.isLeft = isLeft;            this.isRight = isRight;            //if(isLeft && !isRight){                // 预操作code            //} else if (isRight && !isLeft){                // 预操作code            //}        }    };
0 0