Android之ViewPager总结(一)
来源:互联网 发布:用友网络 东方财富 编辑:程序博客网 时间:2024/05/22 15:24
这几天修改应用中的一个Bug,涉及到ViewPager的相关知识,猛然间发现自己对ViewPager相关属性和使用有点模
糊。估计是以前缺乏总结,要用到相关的知识才去了解,达成目的之后,就放下再也不管了。没有总结就没有积
累,没有积累,就没有提高!好了,闲话不多说了,切入正题。既然已经用过ViewPager,现在吃回头草再来研究
ViewPager就应研究个透,打算将ViewPager的总结分几篇写,研究到哪个程度就写到哪个程度吧。今天是第一篇。
先看下效果图。
一 新建项目,引入ViewPager。
ViewPager是android.support.v4.view包中的类,可以用来实现屏幕间的切换。在主布局文件中添加ViewPager,
如下所示的。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context="com.example.testviewpage_1.MainActivity" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /></RelativeLayout>
其中<android.support.v4.view.ViewPager />是ViewPager对应的组件,要将其放到想滑动的位置。
二 构建三个layout,用于滑动切换的界面。
1.layout1.xml
<?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:background="#ffffff" android:orientation="vertical" > </LinearLayout>
2.layout2.xml
<?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:background="#ffff00" android:orientation="vertical" > </LinearLayout>
3.layout3.xml
<?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:background="#ff00ff" android:orientation="vertical" > </LinearLayout>
三个要滑动的界面非常简单,里面没有任何的控件。你也可以往里面添加各种控件,这里只为了讲解相关的原
理,所以仅用背景颜色来区分不同的layout布局。
三 屏幕切换的实现
核心代码如下。
package com.example.testviewpage_1;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class MainActivity extends Activity {private View view1, view2, view3;private ViewPager viewPager; // 对应的viewPagerprivate List<View> viewList;// view数组@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager = (ViewPager) findViewById(R.id.viewpager);LayoutInflater inflater = getLayoutInflater();view1 = inflater.inflate(R.layout.layout1, null);view2 = inflater.inflate(R.layout.layout2, null);view3 = inflater.inflate(R.layout.layout3, null);viewList = new ArrayList<View>();// 将要分页显示的View装入数组中viewList.add(view1);viewList.add(view2);viewList.add(view3);PagerAdapter pagerAdapter = new PagerAdapter() {@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic int getCount() {return viewList.size();}@Overridepublic void destroyItem(ViewGroup container, int position,Object object) {container.removeView(viewList.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(viewList.get(position));return viewList.get(position);}};viewPager.setAdapter(pagerAdapter);}}
现在开始逐步分析上述代码。
private View view1, view2, view3;private ViewPager viewPager; // 对应的viewPagerprivate List<View> viewList;// view数组
如上所述,view1,view2 ,view3对应我们的三个layout,即layout1.xml,layout2.xml,layout3.xml
viewList是一个View数组,盛装上面的三个View。
viewPager = (ViewPager) findViewById(R.id.viewpager);LayoutInflater inflater = getLayoutInflater();view1 = inflater.inflate(R.layout.layout1, null);view2 = inflater.inflate(R.layout.layout2, null);view3 = inflater.inflate(R.layout.layout3, null);viewList = new ArrayList<View>();// 将要分页显示的View装入数组中viewList.add(view1);viewList.add(view2);viewList.add(view3);
上述初始化过程难度不大,就是将资源与变量联系起来布局,最后将实例化的view1,view2,view3添加到
viewList中。
3.1 PagerAdapter——ViewPager的适配器
适配器这东东,想必大家都不会陌生。PagerAdapter比较特殊,必须重写如下四个方法。
- instantiateItem(ViewGroup, int)
- destroyItem(ViewGroup, int, Object)
- getCount()
- isViewFromObject(View, Object)
看看我们是怎样重写上述方法的。
instantiateItem():做了两件事,第一:将当前视图添加到container中,第二:返回当前View。
@Overridepublic Object instantiateItem(ViewGroup container, int position) { container.addView(viewList.get(position)); return viewList.get(position);}
destroyItem():从当前container中删除指定位置(position)的View。
@Overridepublic void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewList.get(position));}
getCount():返回要滑动的View的个数。
@Overridepublic int getCount() { return viewList.size();}
isViewFromObject():对于这个方法就先不做讲解,大家目前先知道它要这样重写就行了,后面我们会对它进行改写。
@Overridepublic boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1;}
源码下载地址:http://download.csdn.net/detail/yangtinghui7/9700519
- Android之ViewPager总结(一)
- Android之ViewPager笔记(一)
- Android之ViewPager总结(二)
- Android之ViewPager总结(三)
- Android学习总结之viewPager
- Android:初级控件之(一)ViewPager(一)
- Android引导页制作及ViewPager知识总结(一)
- Android之ViewPager(引导界面)(一)
- Android进阶——ViewPager详解之初识ViewPager(一)
- Android进阶——ViewPager详解之初识ViewPager(一)
- Android学习之ViewPager(一)——ViewPager的简单使用
- Android之ViewPager总结(五)——使用Fragment实现ViewPager滑动
- Android中的ViewPager(一)
- 一、Android控件选择之ViewPager
- Android开发之ViewPager使用详解(一)
- Android Tab实现总结之Viewpager
- android常用控件ViewPager(一) ViewPager基本应用
- Tab实现之ViewPager(一)
- 一、Read me
- 大家好啊
- CentOS6.5下使用SVN实现多项目管理配置方案
- 全栈工程师之Javascript---*为重点(ZT源)
- 返程发包
- Android之ViewPager总结(一)
- source 和 . 、./ 之间的区别
- 看的到吗
- 重拾python 二十八
- 编程之法(字符串旋转)
- Windows程序设计之创建Windows应用窗体
- matlab 中的关键词
- 后期的预告
- C#一些基础语法总结