ViewPager
ViewPager類提供了多介面切換的新效果。新效果有如下特徵:
[1] 當前顯示一組介面中的其中一個介面。
[2] 當使用者通過左右滑動介面時,當前的螢幕顯示當前介面和下一個介面的一部分。
[3] 滑動結束後,介面自動跳轉到當前選擇的介面中
ViewPager來源於google 的補充組件android-support-v4.jar,位置在androidSDK檔案夾
android-sdks\extras\android\support\ 下
將android-support-v4.jar 引用到項目中
註:該包需要在Android SDK Manager中額外下載Extras下的Android Support package,
或直接下載該jar包到項目中引用
引入後可直接當作控制項在項目中使用。
設定檔頁面面檔案
<android.support.v4.view.ViewPager
android:id="@+id/viewPager1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerVertical="true" />
初始化控制項
viewPager1 = (ViewPager) findViewById(R.id.viewPager1);
viewPager1.setAdapter(new PageAdapter(new ArrayList<View>()));
配置適配器的頁面變化事件
viewPager1
.setOnPageChangeListener(new OnPageChangeListener() {
//頁面選擇
@Override
public void onPageSelected(int position) {
topText.setText(String.valueOf(position+1)+"/"+String.valueOf(lists.length));
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onPageScrolled(int position,
float positionOffset, int positionOffsetPixels) {
}
});
ViewPager使用的適配器基於PagerAdapter基類
主要實現一下四個方法
//擷取當前表單介面數
public int getCount()
//初始化position位置的介面
public Object instantiateItem(View collection, int position)
//銷毀position位置的介面
public void destroyItem(View collection, int position, Object view)
// 判斷是否由對象產生介面
public boolean isViewFromObject(View arg0, Object arg1)
ViewPager控制項的使用中,可以將View裝如ArrayList中作為資料載體,每一項(即每一頁)
為一個View顯示,可以適應大量頁面或者變化的頁面長度的顯示
ViewFilpper
Viewfilpper控制項主要用於在同一個Activity內螢幕見的切換,最長見的情況就是在一個FrameLayout內有多個頁面,比如一個系統設定頁面;一個個人化頁面。
ViewFilpper控制項是系統內建控制項之一,主要是為兩個頁面間的切換設定動畫效果。ViewFilpper繼承自FrameLayout下的ViewAnimator,
android.widget.ViewAnimator類繼承至FrameLayout,ViewAnimator類的作用是為FrameLayout裡面的View切換提供動畫效果。該類有如下幾個和動畫相關的函數:
setInAnimation:設定View進入螢幕時候使用的動畫,該函數有兩個版本,一個接受單個參數,類型為android.view.animation.Animation;一個接受兩個參數,類型為Context和int,分別為Context對象和定義Animation的resourceID。
setOutAnimation: 設定View退出螢幕時候使用的動畫,參數setInAnimation函數一樣。
showNext: 調用該函數來顯示FrameLayout裡面的下一個View。
showPrevious: 調用該函數來顯示FrameLayout裡面的上一個View。
一般不直接使用ViewAnimator而是使用它的兩個子類ViewFlipper和ViewSwitcher。ViewFlipper可以用來指定FrameLayout內多個View之間的轉場效果,可以一次指定也可以每次切換的時候都指定單獨的效果。該類額外提供了如下幾個函數:
isFlipping: 用來判斷View切換是否進行中
setFilpInterval:設定View之間切換的時間間隔
startFlipping:使用上面設定的時間間隔來開始切換所有的View,切換會迴圈進行
stopFlipping: 停止View切換
ViewFilpper的使用方法:
配置分頁檔
<ViewFlipper
android:id="@+id/flipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/CockpitLayout" >
<include
android:id="@+id/secondlayout"
layout="@layout/second" >
</include>
<include
android:id="@+id/firstlayout"
layout="@layout/first" >
</include>
</ViewFlipper>
配置好分頁檔後便可在代碼中對ViewFilpper進行操作和設定切換動畫
ViewFlow
android-viewflow 是 Android 平台上一個視圖切換的效果庫。
ViewFlow 相當於 Android UI 組件提供水平滾動的 ViewGroup,使用 Adapter 進行條目綁定。文檔上說,當你需要在一系列不確定數目的view中滑動時,可以考慮使用ViewFlow。如果你的view數目確定,你應該使用Fragments 或相容庫裡的ViewPager 。
、使用ViewFlow
怎麼使用呢?首先在你的layout檔案中加入:
<org.taptwo.android.widget.ViewFlow
android:id="@+id/viewflow"
app:sidebuffer="5"
/>
其中app:sidebuffer屬性是ViewFlow組件自訂的,使用這些屬性時,需要增加如下的xml的命名空間:
xmlns:app="http://schemas.android.com/apk/res/your.application.package.here"
然後在你的Activity裡面添加如下代碼用於使用ViewFlow:
ViewFlow viewFlow = (ViewFlow) findViewById(R.id.viewflow);
viewFlow.setAdapter(myAdapter);
//設定初始view的位置
//viewFlow.setAdapter(myAdapter, 8);
//監聽view切換事件,簡單的需求可不監聽
viewFlow.setOnViewSwitchListener(new ViewSwitchListener() {
public void onSwitched(View v, int position) {
/ / Your code here
}
});
當然,你也可以使用該庫中的FlowIndicator為你在多個view中切換時提供一個指標,目前該庫已經實現了兩種指標:一種是圓點指標FlowIndicator;另一種是標題指標TitleFlowIndicator。
、使用圓點指標
圓點指標可以這樣使用:
先在layout中這樣定義
<org.taptwo.android.widget.CircleFlowIndicator
android:padding="10dip" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/viewflowindic"
android:background="#00000000"
/>
然後在activity中調用它
CircleFlowIndicator indic = (CircleFlowIndicator)
findViewById(R.id.viewflowindic);
viewFlow.setFlowIndicator(indic);
圓點指標還支援activeColor、inactiveColor、activeType(填充或描邊)、inactiveType(填充或描邊)、fadeOut(設定圓點自動隱藏的秒數,若為0則不會自動隱藏)、radius(圓點的半徑)等。
、使用標題指標
標題指標也是先layout裡定義:
<org.taptwo.android.widget.TitleFlowIndicator
android:id="@+id/viewflowindic"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
app:footerLineHeight="2dp"
app:footerTriangleHeight="10dp"
app:textColor="#FFFFFFFF" app:selectedColor="#FFFFC445"
app:footerColor="#FFFFC445" app:titlePadding="10dp"
app:textSize="11dp" app:selectedSize="12dp"
android:layout_marginTop="10dip"
app:clipPadding="5dp" />
然後在activity中調用它:
TitleFlowIndicator indicator = (TitleFlowIndicator)
findViewById(R.id.viewflowindic);
indicator.setTitleProvider(myTitleProvider);
viewFlow.setFlowIndicator(indicator);
以上就是ViewFlow庫提供三大組件及其用法(來自其文檔),使用時需要下載到其代碼並放在你的項目中的某個包內,當然你也可以把該組件庫打包成jar調用。
比較
根據以上對三種實現的使用描述,可以看出,ViewPager與ViewFlow都能夠使用適配器進行大量資料的適配。並且ViewFlow也帶有原點和標題的位置提示,二者比較相像。ViewFilpper使用時主要是在有限的少數頁面切換中比較合適,並且能夠自訂每一個切換動畫,用於一個應用間的畫面切換比較合適,類似於ActivityGroup。
ViewFlow由於提供源碼,所以在擴充性上更強,可根據需要自行定製,比如加入迴圈播放等。