ViewPager学习
来源:互联网 发布:淘宝商城女童鞋 编辑:程序博客网 时间:2024/06/06 00:39
ViewPager是v4包中的一个类,主要用来在不跳转activity的时候实现,页面的切换.要使用这个控件要加入v4包.使用该控件的时候不能省略包名,需要写上该控件的完整名字.
一简单示例:演示:
1.在主布局文件中添加一个viewpager控件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/myViewPager" android:layout_width="wrap_content" android:layout_height="200dp" > <android.support.v4.view.PagerTitleStrip android:id="@+id/pagertitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" /> </android.support.v4.view.ViewPager></LinearLayout>viewpager的宽高可以自行定义,viewpager控件区域的大小就是代表可以滑动区域的大小.
2 新建3个xml(如tab1.xml,tab2.xml,tab3.xml)布局文件,用来放在viewpager容器中,作为切换的布局.
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#000" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="tab1" /></LinearLayout>3.java代码
public class MainActivity extends Activity {private ViewPager myViewPager;private View tab1;private View tab2;private View tab3;private List<View> viewList;private PagerTitleStrip pagertitle;private List<String> textList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.viewpager);myViewPager = (ViewPager) findViewById(R.id.myViewPager);pagertitle = (PagerTitleStrip) findViewById(R.id.pagertitle);LayoutInflater inflater = getLayoutInflater();tab1 = inflater.inflate(R.layout.tab1, null);tab2 = inflater.inflate(R.layout.tab2, null);tab3 = inflater.inflate(R.layout.tab3, null);viewList = new ArrayList<View>();viewList.add(tab1);viewList.add(tab2);viewList.add(tab3);textList=new ArrayList<String>();textList.add("这是页面1");textList.add("这是页面2");textList.add("这是页面3");MyPagerAdapter pagerAdapter = new MyPagerAdapter();myViewPager.setAdapter(pagerAdapter);}class MyPagerAdapter extends PagerAdapter {@Overridepublic int getCount() {//getCount():返回要滑动的VIew的个数return viewList.size();}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {//destroyItem():从当前container中删除指定位置(position)的View;container.removeView(viewList.get(position));}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {// TODO Auto-generated method stubreturn arg0 == arg1;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {//instantiateItem():做了两件事,第一:将当前视图添加到container中,第二:返回当前Viewcontainer.addView(viewList.get(position));return viewList.get(position);}@Overridepublic CharSequence getPageTitle(int position) {// TODO Auto-generated method stubreturn textList.get(position);}}}
二 代码详解
viewpager跟listview一样,需要一个适配器填充内容.常用的适配器有两种.PagerAdapter和FragmentPagerAdapter.上面我使用的是PagerAdapter.使用PagerAdapter至少重写这4个方法- instantiateItem(ViewGroup, int):将当前视图添加到container中,第二:返回当前View
- destroyItem(ViewGroup, int, Object):从当前container中删除指定位置(position)的View;
- getCount():这个方法返回能滑动的总的布局数目
- isViewFromObject(View, Object):判断一个视图是否与一个给定的key相对应
ViewPager的执行流程大概是这样的:
ViewPager并不直接管理页面,而是通过一个key将每个页面联系起来。这个key用来跟踪和唯一标识一个给定的页面,且该key独立于adapter之外。
PagerAdapter中的startUpdate(ViewGroup)方法一旦被执行,就说明ViewPager的内容即将开始改变。
紧接着,instantiateItem(ViewGroup, int)和/或destroyItem(ViewGroup, int, Object)方法将会被执行,
然后finishUpdate(ViewGroup)的执行就意味着这一次刷新的完成。
当finishUpdate(ViewGroup)方法执行完时,与instantiateItem(ViewGroup, int)方法返回的key相对应的视图将会被加入到父ViewGroup中,而与传递给destroyItem(ViewGroup, int, Object)方法的key相对应的视图将会被移除。isViewFromObject(View, Object)方法则判断一个视图是否与一个给定的key相对应。
关于这个key,PagerAdapter会选择将视图本身作为key,在将视图创建并加入父ViewGroup之后通过instantiateItem(ViewGroup, int)返回。这种情况下,destroyItem(ViewGroup, int, Object) 的实现方法只需要将View从ViewGroup中移除即可,而isViewFromObject(View, Object)的实现方法可以直接写成return view == object
三 关于viewpager中的标题,有两种类型: PagerTitleStrip和PagerTabStrip
PagerTitleStrip:在布局xml中将PagerTitleStrip作为ViewPager的子控件直接嵌入其中,设置android:layout_gravity=""的值要设置为top或bottom。将标题栏显示在顶部或底部.与PagerTabStrip的区别在于,PagerTabStrip是可以点击的.类似tabhost那种效果
同时要使PagerTitleStrip起作用必须重写getPageTitle()方法同时提供每个页面的标题数组.如以上代码所示.
阅读全文
0 0
- ViewPager学习
- ViewPager学习
- Android ViewPager的学习
- Android ViewPager学习
- android学习之-ViewPager
- Android-ViewPager学习
- ViewPager学习demo2
- ViewPager学习笔记
- viewpager的学习使用
- viewpager+fragment学习笔记
- viewpager的学习
- Android学习--viewpager+ Fragment
- Android--viewpager学习
- Android--viewpager学习
- Android ViewPager的学习
- 学习笔记之ViewPager
- viewpager学习笔记
- 温故知新-ViewPager学习笔记
- 大写字母转小写字母
- HDU 2159 FATE(二维费用背包)
- String 转 List
- PHP 使用CURL库IP欺骗,隐藏真实客户端IP
- Eclipse svn提交代码的一般步骤(对比、解决冲突、更新、提交)
- ViewPager学习
- MongoDB第一课,shell命令下的增删改查
- SSH整合
- Android学习 ——SystemUIService之StorageNotification分析
- 整数求和
- Node.js环境下对MongoDB实现查,插,分页功能
- 习题6.7
- 配置Canvas为全屏时,无滚动条
- android string.xml里空格表示