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"/>