Android ViewPager使用详解
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等。那如何使用它呢,与LisstView类似,我们也需要一个适配器,他就是PagerAdapter。看一下api的图片,

ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步骤来使用它:
1.在住布局文件里加入
它的布局文件:
可以左右滑动页卡,但是仔细看一下,标题的效果不好,不能一次显示一个,而且标题还滑动。其实在api里面提供了一个pagerTabStrip.setTextSpacing()来设置标题的距离,但是我在这里设置了,没有效果不知道为什么,明白的朋友希望能够赐教一下。 所以就有人使用下面这样的方法来仿微博的效果,, 这个标题就固定了,而且可以左右滑动,也有下面的横线,来指示页卡。方法和上面的差不多,区别在于这个横线需要我们自己来做,其实就是一个图片。这个例子是网上的一篇文章,看代码:主Activity:/** * * 头标点击监听 3 */private class MyOnClickListener implements OnClickListener{ private int index=0; public MyOnClickListener(int i){ index=i; }public void onClick(View v) {viewPager.setCurrentItem(index);}}public class MyViewPagerAdapter extends PagerAdapter{private List<View> mListViews;public MyViewPagerAdapter(List<View> mListViews) {this.mListViews = mListViews;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(mListViews.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position) { container.addView(mListViews.get(position), 0); return mListViews.get(position);}@Overridepublic int getCount() {return mListViews.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0==arg1;}} public class MyOnPageChangeListener implements OnPageChangeListener{ int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量int two = one * 2;// 页卡1 -> 页卡3 偏移量public void onPageScrollStateChanged(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}public void onPageSelected(int arg0) {/*两种方法,这个是一种,下面还有一种,显然这个比较麻烦Animation animation = null;switch (arg0) {case 0:if (currIndex == 1) {animation = new TranslateAnimation(one, 0, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, 0, 0, 0);}break;case 1:if (currIndex == 0) {animation = new TranslateAnimation(offset, one, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, one, 0, 0);}break;case 2:if (currIndex == 0) {animation = new TranslateAnimation(offset, two, 0, 0);} else if (currIndex == 1) {animation = new TranslateAnimation(one, two, 0, 0);}break;}*/Animation animation = new TranslateAnimation(one*currIndex, one*arg0, 0, 0);//显然这个比较简洁,只有一行代码。currIndex = arg0;animation.setFillAfter(true);// True:图片停在动画结束位置animation.setDuration(300);imageView.startAnimation(animation);Toast.makeText(WeiBoActivity.this, "您选择了"+ viewPager.getCurrentItem()+"页卡", Toast.LENGTH_SHORT).show();} }}
所以总结一下,我们可以使用ViewPager做什么:1.程序使用导航,外加底部圆点的效果,这个在微信示例里介绍了 2.页卡滑动,加上菜单的效果,不管是之前的支持手势也支持底部图标点击的微信,还是今天的微博。
- 9楼skyinmyheart昨天 06:21
- 楼主,可否给下源码,377721976@qq.com,谢谢。
- Re: wangjinyu501昨天 09:24
- 回复skyinmyheartn不客气
- 8楼hwylove_you昨天 12:56
- 源代码能不能发一下n584624785@qq.comn谢谢
- Re: wangjinyu501昨天 12:57
- 回复hwylove_youn不客气
- Re: wangjinyu501昨天 12:57
- 回复hwylove_youn可以
- 7楼everyonekill昨天 12:56
- 求源码 3Q 楼主 571321556@qq.com
- 6楼jardde昨天 10:50
- 730022083@qq.com同求。。感谢LZ
- 5楼linkinH前天 09:24
- ViewPager的adapter只能1次添加全部子项,不能在之前的子项基础上追加新的子项,有解决办法吗?
- Re: liaorui860609昨天 10:35
- 回复linkinHnviewflow 改造一下可以做到。
- 4楼pobabyparkour前天 19:32
- 困扰我的问题终于在您这篇文章中解决了!n谢谢您的分享!
- Re: wangjinyu501前天 22:45
- 回复pobabyparkourn不客气
- 3楼anke_li3天前 00:56
- 楼主能不能弄个源代码提供给我们下载,感谢
- Re: wangjinyu501前天 11:26
- 回复anke_lin邮箱呢
- 2楼czjuttsw3天前 22:14
- 源代码能不能发一下n282489212@qq.com
- Re: wangjinyu5013天前 22:42
- 回复czjuttswnok
- 1楼czjuttsw3天前 22:11
- 学习了

, 这个标题就固定了,而且可以左右滑动,也有下面的横线,来指示页卡。方法和上面的差不多,区别在于这个横线需要我们自己来做,其实就是一个图片。这个例子是网上的一篇文章,看代码:主Activity:/** * * 头标点击监听 3 */private class MyOnClickListener implements OnClickListener{ private int index=0; public MyOnClickListener(int i){ index=i; }public void onClick(View v) {viewPager.setCurrentItem(index);}}public class MyViewPagerAdapter extends PagerAdapter{private List<View> mListViews;public MyViewPagerAdapter(List<View> mListViews) {this.mListViews = mListViews;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(mListViews.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position) { container.addView(mListViews.get(position), 0); return mListViews.get(position);}@Overridepublic int getCount() {return mListViews.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0==arg1;}} public class MyOnPageChangeListener implements OnPageChangeListener{ int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量int two = one * 2;// 页卡1 -> 页卡3 偏移量public void onPageScrollStateChanged(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}public void onPageSelected(int arg0) {/*两种方法,这个是一种,下面还有一种,显然这个比较麻烦Animation animation = null;switch (arg0) {case 0:if (currIndex == 1) {animation = new TranslateAnimation(one, 0, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, 0, 0, 0);}break;case 1:if (currIndex == 0) {animation = new TranslateAnimation(offset, one, 0, 0);} else if (currIndex == 2) {animation = new TranslateAnimation(two, one, 0, 0);}break;case 2:if (currIndex == 0) {animation = new TranslateAnimation(offset, two, 0, 0);} else if (currIndex == 1) {animation = new TranslateAnimation(one, two, 0, 0);}break;}*/Animation animation = new TranslateAnimation(one*currIndex, one*arg0, 0, 0);//显然这个比较简洁,只有一行代码。currIndex = arg0;animation.setFillAfter(true);// True:图片停在动画结束位置animation.setDuration(300);imageView.startAnimation(animation);Toast.makeText(WeiBoActivity.this, "您选择了"+ viewPager.getCurrentItem()+"页卡", Toast.LENGTH_SHORT).show();} }}