读书人

Android ViewPager应用详解

发布时间: 2012-11-23 22:54:33 作者: rapoo

Android ViewPager使用详解

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

Android ViewPager应用详解

ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步骤来使用它:

1.在住布局文件里加入

Android ViewPager应用详解
可以左右滑动页卡,但是仔细看一下,标题的效果不好,不能一次显示一个,而且标题还滑动。其实在api里面提供了一个pagerTabStrip.setTextSpacing()来设置标题的距离,但是我在这里设置了,没有效果不知道为什么,明白的朋友希望能够赐教一下。 所以就有人使用下面这样的方法来仿微博的效果,Android ViewPager应用详解, 这个标题就固定了,而且可以左右滑动,也有下面的横线,来指示页卡。方法和上面的差不多,区别在于这个横线需要我们自己来做,其实就是一个图片。这个例子是网上的一篇文章,看代码:主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();}        }}
它的布局文件:
Android ViewPager应用详解

所以总结一下,我们可以使用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
学习了

读书人网 >Android

热点推荐