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







0 0
原创粉丝点击