android 三種實現水平向滑動方式(ViewPager、ViewFilpper、ViewF...

ViewPager

ViewPager類提供了多界面切換的新效果。新效果有以下特徵: html

[1] 當前顯示一組界面中的其中一個界面。 android

[2] 當用戶經過左右滑動界面時,當前的屏幕顯示當前界面和下一個界面的一部分。 app

[3] 滑動結束後,界面自動跳轉到當前選擇的界面中 ide

ViewPager來源於google 的補充組件android-support-v4.jar,位置在androidSDK文件夾 函數

android-sdks\extras\android\support\ 下 動畫

將android-support-v4.jar 引用到項目google

注:該包須要在Android SDK Manager中額外下載Extras下的Android Support package, spa

或直接下載該jar包到項目中引用 .net

引入後可直接看成控件在項目中使用。 code

配置文件頁面文件


<android.support.v4.view.ViewPager 

android:id="@+id/viewPager1"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_centerVertical="true" />

配置適配器的頁面變化事件



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>

能夠動態添加頁面


flipper.addView(View(), new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));



配置好頁面文件後即可在代碼中對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裏面添加以下代碼用於使用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 

} 

});

圓點指示器還支持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使用時主要是在有限的少數頁面切換中比較合適,而且可以自定義每個切換動畫,用於一個應用

相關文章
相關標籤/搜索