您的位置:首页 > 其它

ViewPage判断左右滑动

2015-09-06 11:48 375 查看

自定义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
//}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  viewpager