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实现高仿launcher左右拖动效果
- 实现轮转广告带底部指示的自定义ViewPager控件
- 自定义RadioButton和ViewPager实现TabHost带滑动的页卡效果
- 使用ViewPager实现android软件使用向导功能实现步骤
- Android ViewPager相册横向移动的实现方法
- viewpager的layout_width="wrap_content"无效问题
- ScrollView ViewPager嵌套导致滑动冲突解决方案
- Fragment+viewpager+Fragment 嵌套 第二次进入该fragment不显示数据
- android自定义tabbar,并带badgeview消息提示
- ViewPager播放图片问题
- CollapsingAvatarToolbar 头像随ListView滚动缩回到ActionBar特
- Material-Movies-master 影视软件封面页面呈现
- AppManager-for-Android App应用管理
- ImageView实现照片墙效果
- ViewPager : Banner滚动
- ViewPager的基础运用
- 即时聊天表情功能的实现
- 关于父view拦截触屏事件
- 无限滑动的ViewPager
- 另一种方法:当使用ViewPager加载大量View时卡顿严重的简单解决方法