如何在Fragment中使用ViewPager,并实现导航随手势滑动效果
2015-01-27 17:53
375 查看
看了之前自己的一篇文章,感觉写的不够好,今天推荐一个更好的实现ViewPager导航,比以前的那个帅多了,而且简单多了!可惜CSDN没有删除博客的权限,否则就删除了。以前的文章:http://blog.csdn.net/u013758734/article/details/29848117
今天主要介绍的是:在Fragment中使用ViewPager,ViewPager的内容依然是多个Fragment。本文参考了:http://www.tuicool.com/articles/E7n6vu 不过原文中的方法对于我的实际情况还是有点不合适的,出了点问题,下面再说。
要实现View的滑动效果,就必须不断的改变他的位置,可以通过setLayoutParams,也可以通过scrollTo或者scrollBy,或者重写控件等,这里我使用的是更简单的setX(float x),就是改变View的X的坐标位置就OK了,十分的方便。
看一下最主要的代码:
可以看到上面根据currentIndex以及position的变化,不断的计算View的X对应要滑动到的位置,currentIndex是当前选中的item索引,position是ViewPager滑动时显示的视图的索引。
看一下效果图:
现在来说一下如果通过setLayoutParams会出现什么问题,如果是通过这种方式,那么当你切换到这个Fragment时,初始化的时候即使你通过setCurrentItem(2)来设置默认显示第三个子fragment,导航栏中的蓝色背景依然停留在第一个导航处,到那时下面的内容显示是第三个。另外你第一次通过手指切换内容视图的时候,上面的蓝色背景不会随着手指一动,只有页面切换完成,他才会移动,就是在ViewPager滚动过程中,setLayoutParams没有起作用,虽然执行了,但是没有效果,后面再滑动的时候就会随着手指移动了。
上面代码中判断语句:
之所以这样写,是因为如果不添加currentIndex-position==1的判断,从第一个滑到第三个或者第四个,背景图片会出现颤抖的情况,其实这种效果也很不错,要是喜欢,可以把这个&&后面的去掉。
其实写这么多我知道也没人看,下面是源码地址:
https://github.com/kidloserme/ViewPagerSlide
今天主要介绍的是:在Fragment中使用ViewPager,ViewPager的内容依然是多个Fragment。本文参考了:http://www.tuicool.com/articles/E7n6vu 不过原文中的方法对于我的实际情况还是有点不合适的,出了点问题,下面再说。
要实现View的滑动效果,就必须不断的改变他的位置,可以通过setLayoutParams,也可以通过scrollTo或者scrollBy,或者重写控件等,这里我使用的是更简单的setX(float x),就是改变View的X的坐标位置就OK了,十分的方便。
看一下最主要的代码:
mPageVp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { currentIndex = position; } @Override public void onPageScrolled(int position, float offset, int offsetPixels) { if(currentIndex>position&&(currentIndex-position)==1) { int xOffset = (int) (-(1 - offset) * (screenWidth * 1.0 /pageNum) + currentIndex * (screenWidth /pageNum)); rlOverlay.setX(xOffset); }else if(currentIndex==position) { int xOffset = (int) (offset * (screenWidth * 1.0 /pageNum) + currentIndex * (screenWidth /pageNum)); rlOverlay.setX(xOffset); } } @Override public void onPageScrollStateChanged(int state) { //在这里来改变被选中的item的高亮样式 } });
可以看到上面根据currentIndex以及position的变化,不断的计算View的X对应要滑动到的位置,currentIndex是当前选中的item索引,position是ViewPager滑动时显示的视图的索引。
看一下效果图:
现在来说一下如果通过setLayoutParams会出现什么问题,如果是通过这种方式,那么当你切换到这个Fragment时,初始化的时候即使你通过setCurrentItem(2)来设置默认显示第三个子fragment,导航栏中的蓝色背景依然停留在第一个导航处,到那时下面的内容显示是第三个。另外你第一次通过手指切换内容视图的时候,上面的蓝色背景不会随着手指一动,只有页面切换完成,他才会移动,就是在ViewPager滚动过程中,setLayoutParams没有起作用,虽然执行了,但是没有效果,后面再滑动的时候就会随着手指移动了。
上面代码中判断语句:
if(currentIndex>position&&(currentIndex-position)==1)
之所以这样写,是因为如果不添加currentIndex-position==1的判断,从第一个滑到第三个或者第四个,背景图片会出现颤抖的情况,其实这种效果也很不错,要是喜欢,可以把这个&&后面的去掉。
其实写这么多我知道也没人看,下面是源码地址:
https://github.com/kidloserme/ViewPagerSlide
相关文章推荐
- 如何在Fragment中使用ViewPager,并实现导航随手势滑动效果
- 教你如何使用ViewPager+Fragment一步步打造顶部导航界面滑动效果
- 教你如何使用ViewPager+Fragment一步步打造顶部导航界面滑动效果
- Android ViewPager和Fragment实现顶部导航界面滑动效果
- android_使用ViewPager和Fragment实现滑动导航
- 使用ViewPager和Fragment同时实现点击底部Tab切换和手势滑动切换Fragment
- Android App中使用ViewPager+Fragment实现滑动切换效果
- Android ViewPager和Fragment实现顶部导航界面滑动效果、标签下的tab位置
- Android ViewPager和Fragment实现顶部导航界面滑动效果
- Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换
- 使用RadioGroup+ViewPager+Fragment实现带滑动的页卡效果TabHost时遇到的问题
- Android ViewPager和Fragment实现顶部导航界面滑动效果
- Android使用TabLayou+fragment+viewpager实现滑动切换页面效果
- 如何利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
- Android ViewPager和Fragment实现仿微信导航界面及滑动效果
- 使用ViewPager和Fragment实现滑动导航
- 使用ViewPager和Fragment实现底部导航滑动重构版
- Android ViewPager和Fragment实现顶部导航界面滑动效果
- Android Studio使用ViewPager+Fragment实现滑动菜单Tab效果
- 美团分类导航按钮效果使用ViewPager+GridView实现左右滑动查看更多分类的功能