android - ViewPager 监听左右滑动
来源:互联网 发布:游戏抢红包软件 编辑:程序博客网 时间:2024/05/16 05:10
说明:
android ViewPager 监听左右滑动,使用setOnPageChangeListener中的onPageScrollStateChanged来监听,其中onPageScrollStateChanged参数:
public void onPageScrollStateChanged(int arg0)
此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。
arg0 ==1的时辰默示正在滑动,
arg0==2的时辰默示滑动完毕了,
arg0==0的时辰默示什么都没做。
当页面开始滑动的时候,三种状态的变化顺序为(1,2,0)
所以可以判断viewPager目前的状态来控制SwipeRefreshLayout是否可滑。
实现有两种方式,
方法一:
是直接用布局对象实现:
ViewPager viewPager = (ViewPager) view.findViewById(R.id.vp_huandengpian);viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){ @Override public void onPageScrollStateChanged(int state) { enableDisableSwipeRefresh(state == ViewPager.SCROLL_STATE_IDLE); } });
方法二:
重写ViewPager
import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import com.meityitian.app.utils.Debug; /** * 重写,添加了判定滑动方向的方法 * @author zxy * */ public class meityitianViewPager extends ViewPager { private boolean left = false; private boolean right = false; private boolean isScrolling = false; private int lastValue = -1; private ChangeViewCallback changeViewCallback = null; public meityitianViewPager(Context context, AttributeSet attrs) { super(context, attrs); init(); } public meityitianViewPager(Context context) { super(context); init(); } /** * init method . */ private void init() { setOnPageChangeListener(listener); } /** * listener ,to get move direction . */ public OnPageChangeListener listener = new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) { if (arg0 == 1) { isScrolling = true; } else { isScrolling = false; } Debug.infoByTag("meityitianViewPager", "meityitianViewPager onPageScrollStateChanged : arg0:" + arg0); if (arg0 == 2) { Debug.infoByTag("meityitianViewPager", "meityitianViewPager onPageScrollStateChanged direction left ? " + left); Debug.infoByTag("meityitianViewPager", "meityitianViewPager onPageScrollStateChanged direction right ? " + right); //notify .... if(changeViewCallback!=null){ changeViewCallback.changeView(left, right); } right = left = false; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { if (isScrolling) { if (lastValue > arg2) { // 递减,向右侧滑动 right = true; left = false; } else if (lastValue < arg2) { // 递减,向右侧滑动 right = false; left = true; } else if (lastValue == arg2) { right = left = false; } } Log.i("meityitianViewPager", "meityitianViewPager onPageScrolled last :arg2 ," + lastValue + ":" + arg2); lastValue = arg2; } @Override public void onPageSelected(int arg0) { if(changeViewCallback!=null){ changeViewCallback.getCurrentPageIndex(arg0); } } }; /** * 得到是否向右侧滑动 * @return true 为右滑动 */ public boolean getMoveRight(){ return right; } /** * 得到是否向左侧滑动 * @return true 为左做滑动 */ public boolean getMoveLeft(){ return left; } /** * 滑动状态改变回调 * @author zxy * */ public interface ChangeViewCallback{ /** * 切换视图 ?决定于left和right 。 * @param left * @param right */ public void changeView(boolean left,boolean right); public void getCurrentPageIndex(int index); } /** * set ... * @param callback */ public void setChangeViewCallback(ChangeViewCallback callback){ changeViewCallback = callback; } }
遇到的问题;
1.由于我的ViewPager和ViewPagerIndicator配合使用,这样倒是重写的ViewPager里面的setOnPageChangeListener不起作用,是因为ViewPagerIndicator会重新重写ViewPager的setOnPageChangeListener,造成不起作用。
0 0
- android - ViewPager 监听左右滑动
- Android 如何去除ViewPager的左右滑动监听
- android viewpager 滑动监听
- Android ViewPager 监听滑动
- Android-viewpager滑动监听
- android viewpager左右循环滑动
- Android ViewPager左右滑动月历
- android viewpager 禁止左右滑动
- android viewpager 无限左右滑动
- Android Viewpager拦截 左右滑动
- Android禁止ViewPager左右滑动
- android viewpager禁止左右滑动
- Android 禁止ViewPager左右滑动
- android监听左右滑动事件
- android左右滑动监听,上下滑动
- android 使用ViewPager实现左右滑动
- Android使用ViewPager实现左右滑动效果
- android ViewPager,ViewFlipper,ViewFlow实现左右滑动
- oracle千万级数据查询优化
- mvp模式的套路怎么写
- (其他2)VideoPlayer 介绍
- QT5实现贪吃蛇使用图形视图构架
- c/c++的堆与栈 与数据结构的堆和栈的区别
- android - ViewPager 监听左右滑动
- Linux中删除刚刚解压缩的文件
- 汇编语言基础知识(更新中)
- JS中的变量声明
- Android低阶之【chapter-8】BroadCastReceive 广播
- 代码中设置View的LayoutParams
- 使用codestriker搭建代码评审平台
- Python环境搭建及IDE选择
- Hibernate(五)HQL语句