1. 程式人生 > >android常用控制元件ViewPager(一) ViewPager基本應用

android常用控制元件ViewPager(一) ViewPager基本應用

ViewPager這個控制元件主要是用來實現螢幕之間的滑動切換(當然這樣的控制元件也可以完全自己打造)它是google SDk中自帶的一個附加包的一個類。現在很多應用都運用了ViewPager這樣的效果。本篇先介紹ViewPager的基本功能。

ViewPager的基本應用

  ViewPager作為與ListView一類的資料容器類控制元件在使用上也是通過介面卡來完成。在一個簡單的ViewPager中,只需要實現它的PagerAdapter介面卡就好。在一般使用中,ViewPager總是配合著Fragment一起使用,並且提供了專門的FragmentPagerAdapter和FragmentStatePagerAdapter類供Fragment中的ViewPager使用,具體實現在下一章給出。
  在使用ViewPager的時候需要使用到兩個元件類分別是PagerTitleStrip類和PagerTabStrip類。根據官方的文件對這兩個元件的解釋分別是:
1、PagerTitleStrip是ViewPager的一個關於當前頁面、上一個頁面和下一個頁面的一個非互動的指示器。
2、PagerTabStrip是ViewPager的一個關於當前頁面、上一個頁面和下一個頁面的一個可互動的指示器。
這裡的互動是指是否可以被點選。

建立一個ViewPager

一、佈局檔案 。在佈局檔案中,我們只需要將ViewPager引入即可。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.viewpagedemo.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="300dp" android:layout_gravity="center" >
<android.support.v4.view.PagerTitleStrip android:id="@+id/pagertab" android:layout_width="wrap_content" android:layout_height="20dp" android:layout_gravity="top"/> </android.support.v4.view.ViewPager> </RelativeLayout>

這裡引入可一個ViewPager並且引入了子控制元件PagerTitleStrip。
二、寫介面卡函式

 PagerAdapter pagerAdapter = new PagerAdapter() {

            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                // TODO Auto-generated method stub
                Log.d("HK","isViewFromObject called");
                return arg0 == arg1;
            }

            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return viewList.size();
            }

            @Override
            public void destroyItem(ViewGroup container, int position,
                                    Object object) {
                // TODO Auto-generated method stub
                Log.d("HK","destroyItem called");
                container.removeView(viewList.get(position));
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                // TODO Auto-generated method stub
                container.addView(viewList.get(position));

                Log.d("HK","instantiateItem called");
                return viewList.get(position);
            }

            @Override
            public CharSequence getPageTitle(int position) {
                // TODO Auto-generated method stub
                Log.d("HK","getPageTitle called");
                return titleList.get(position);
            }
        };

在適配其中,可以看到我們重寫了介面卡的相關函式。對於PagerAdapter 我們至少需要重寫4個函式。分別為:
isViewFromObject(View arg0, Object arg1):
public int getCount(): 返回需要滑動View的個數。
public void destroyItem(ViewGroup container, int position, Object object):從當前container中刪除指定位置(position)的View。
public Object instantiateItem(ViewGroup container, int position):根據position建立頁面。介面卡通過這個函式為container提供內容。
  在這裡我們還重寫了getPageTitle,這個是為PagerTitleStrip提供內容。
  對於PagerTabStrip 只需要把子控制元件換成

    <android.support.v4.view.PagerTabStrip  
            android:id="@+id/pagertab"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"   
            android:layout_gravity="top"/>