ViewPager滑动监听的参数解释

viewpager.setOnPageChangeListener (new OnPageChangeListener() {
                  
                   @Override
                   public void onPageSelected(int select) {
                         // TODO Auto-generated method stub
                         Log. d( "dml", "onPageSelected:::::select ============ " + select) ;
                   }
                  
                   @Override
                   public void onPageScrolled(int positon, float arg1, int arg2 ) {
                         // TODO Auto-generated method stub
                         Log. d( "dml", "onPageScrolled:::::position = " + positon);
                   }
                  
                   @Override
                   public void onPageScrollStateChanged(int state) {
                         // TODO Auto-generated method stub
                         Log. d( "dml", "onPageScrollStateChanged:::::state = " + state) ;
                   }
             });



1. position永远是当前界面从左往右的第一个界面的index,不管你是否在滑动   所以一开始没有滑动onPageScrolled也会调用一次,并且position=0. 滑动其实分为两个过程:首先手指带动viewpager滑动,然后手指离开屏幕viewpager会自己处理(要么回弹 要么滑动到下一个界面),这整个过程onPageScrolled都会回调,当然position会一直变化

2. onPageScrollStateChanged会在一次滑动中回调三次,顺序是 1  >  2 > 0 其中2就是手指离开屏幕了,滑动事件成功了,onPageSelected肯定是在这个 2 后一步执行,而且只有当前界面有变化才回调,赋值位当前界面index,所以回弹了onPageSelected它就不会回调的

3. 要判断用户往哪边滑,就应该用两个条件一起判断:当前界面 int index,滑动的position. 比如: 当前在第二个界面,那么 int index = 1,此时position = 1,用户开始滑向第一个界面position立刻变为0(因为第一个界面已经漏出来了)   如果是往第三个界面滑动,position会保持为1(因为第二个界面还没完全隐藏呢),直到完全滑到第三个界面position=2       好,那现在继续左滑因为已经到最右了划不动 所以position此时一直保持2,同样的在第一个界面右滑 position会一直保持为0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值