ViewPage判断左右滑动

自定义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
            //}
        }
    };

猜你喜欢

转载自blog.csdn.net/BlogRecord/article/details/48242279