ViewPager的滑动和滑动特效
来源:互联网 发布:windows查看进程命令 编辑:程序博客网 时间:2024/05/23 20:17
首先是OnPagerChangedListener执行顺序:
onPagerSelected方法只有在页面翻页的时候才会执行,而且是在 onPageScrollStateChanged方法之后,其 state必须为2,即为松手。onPageScrollChanged方法在手指按下去滑动,松开时,和停止滑动的时候执行。按下去的时候 state 为1,松开为2,停止滑动为0。
onpagerScrolled方法是在滑动的时候执行。什么也不做的时候,只要设置了 OnpagerChangedListener就会执行 OnpagerScrolled 的方法,其中,position为0,positionOffset为0.0,positionOffsetPixels为0。当然如果 viewpager 设置了 currentItem的话,postion 应该会变化。
这里由第一页到第二页0---->1
当向左滑的时候没有到能翻页的地方,之后松手,会回弹过去:
先执行onPageScrollStateChanged,state先为1。在执行onPageScrolled方法,postion为0,positionOffset逐渐变大,但没有到一个值大概是0.8(小于1),postionOffsetPixel 也是逐渐变大。-----> 松手之后再执行onPageScrollStateChanged,此时 state 为2。之后onPageScrolled方法,position 还是0,但 postionOffset逐渐减小,直到0.0,postionOffsetPixel也逐渐减小,直到0。------>最后执行PageScrollStateChanged方法,state为0.
当向左滑的时候到能翻页的地方:
先执行onPageScrollStateChanged,state先为1。在执行onPageScrolled方法,postion为0,positionOffset逐渐变大,但没有到一个值大概是0.8(小于1),postionOffsetPixel 也是逐渐变大。-----> 松手之后再执行onPageScrollStateChanged,此时 state 为2。之后执行onPageSelected方法,postion为1,之后onPageScrolled方法,position 还是0, postionOffset仍逐渐增大,直到1.0但没有到1,postionOffsetPixel也逐渐增大。之后 position 为1,positionOffset为0.0,positionOffsetPixel为0------>最后执行PageScrollStateChanged方法,state为0.
这里由第二页到第一页1---->0:
当向右滑的时候没有到能翻页的地方,之后松手,会回弹过去:
先执行onPageScrollStateChanged,state先为1。在执行onPageScrolled方法,postion为0,positionOffset逐渐减小,但没有到一个值大概是0.4,postionOffsetPixel 也是逐渐减小。-----> 松手之后再执行onPageScrollStateChanged,此时 state 为2。之后onPageScrolled方法,position 还是0,但 postionOffset逐渐增加,接近1,postionOffsetPixel也逐渐增加,接近1。之后 position 为1,positionOffset为0.0,positionOffsetPixel为0------>最后执行PageScrollStateChanged方法,state为0.
当向右滑的时候到能翻页的地方:
先执行onPageScrollStateChanged,state先为1。在执行onPageScrolled方法,postion为0,positionOffset逐渐减小,但没有到一个值大概是0.4,postionOffsetPixel 也是逐渐减小。-----> 松手之后再执行onPageScrollStateChanged,此时 state 为2。之后执行onPageSelected方法,postion为0,之后onPageScrolled方法,position 还是0, postionOffset仍逐渐减小,直到0.0但没有到0,postionOffsetPixel也逐渐减小。之后 position 为0,positionOffset为0.0,positionOffsetPixel为0------>最后执行PageScrollStateChanged方法,state为0.
其次是实现滑动最后一页再左滑,页面跳转:
viewpager 设置 onpagerChangedListener,重写onPageScrolled方法,其中intposition, floatpositionOffset, intpositionOffsetPixels有这三个参数,第一个 postion 参数,在刚开始滑动的时候是当前位置,滑动到一定位置时,为前一个或上一个。positionOffset 为偏移量,往左滑,为(0,1)变化。右滑为(1,0)变化。
positionOffsetPixels为偏移像素,左滑:(0,屏幕宽度),右滑:(屏幕宽度,0)。
因为最后一页再滑动的时候,onPagScrolled 里 postionOffset为0.0,positionOffPixel 为0,position为页面个数-1。继续左滑的话,只有 state会产生变化,当按下滑动的时候 state为1-->2-->0,由于从上一页滑到最后一页的时候,会出现 state=2或等于0的时候 postion=页面个数-1且 positionOffPixel 为0的时候。所以不能用 state==2或 state==0判断,所以判断应该为:
if (position == imgs.size()-1&&positionOffsetPixels==0&&mState==1){
finish();
}
Viewpager滑动特效:
setPageTransformer方法。
主要代码:
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { Log.e("onPageScrolled:","position为"+position); Log.e("onPageScrolled:","positionOffset为"+positionOffset); Log.e("onPageScrolled:","positionOffsetPixels为"+positionOffsetPixels); if (position == imgs.size()-1&&positionOffsetPixels==0&&mState==1){ finish(); } } @Override public void onPageSelected(int position) { Log.e("onPageSelected:","position为"+position); } @Override public void onPageScrollStateChanged(int state) { mState = state; Log.e("PageScrollStateChanged:","state"+state); }});viewPager.setPageTransformer(false, new ViewPager.PageTransformer() { @Override public void transformPage(View page, float position) { page.setPivotX(page.getMeasuredWidth()/2); page.setPivotY(page.getMeasuredHeight()/2); page.setRotationY(180*position); }});
阅读全文
0 0
- ViewPager的滑动和滑动特效
- ViewPager的滑动禁止和滑动启动
- android ViewPager 实现Gallery 效果和滑动特效
- Android ViewPager特效之水滴效果的滑动切换页面
- 实现Button和ViewPager的对应滑动
- slidingmenu和ViewPager滑动冲突的解决方法
- 解决listView和ViewPager的滑动问题
- 解决 HorizontalScrollView 和 ViewPager 的滑动冲突
- ViewPager和SlidingPaneLayout的滑动冲突事件
- SwipeRefreshLayout和Viewpager的滑动冲突问题
- ViewPager的滑动切换
- ViewPager的循环滑动
- ViewPager的循环滑动
- viewpager的滑动监听
- 竖向滑动的viewpager
- 无限滑动的ViewPager
- 禁止滑动的ViewPager
- 无限滑动的viewpager
- 【@RequestMapping】 Cannot map 'groupController' method
- 调用admin/luke接口获取所有分词结果注意事项
- activity的启动模式
- Web前端需要掌握的知识
- Shiro 权限管理filterChainDefinitions过滤器配置
- ViewPager的滑动和滑动特效
- jquery和javascript的区别(常用方法比较)
- iOS
- iOS开发资料
- mybatis 参考文档地址
- STM32F407时钟配置
- HDU初学者训练指南(转载),感谢前人们的贡献
- HTML5+CSS3(播放视频,矩形,半圆,选择器)
- linux下socket模板函数接受与发送