android 三種實現水平向滑動方式(ViewPager、ViewFilpper、ViewFlow)的比較
ViewFlow 還沒用過。以後使用一下.
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.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控制元件主要用於在同一個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 。
1、使用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。
1、使用圓點指示器
圓點指示器可以這樣使用:
先在layout中這樣定義
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(圓點的半徑)等。
2、使用標題指示器
標題指示器也是先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使用時主要是在有限的少數頁面切換中比較合適,並且能夠自定義每一個切換動畫,用於一個應用
相關文章
- 三種滑動方式的比較(scrollTo & view動畫 & 改變佈局引數)View動畫
- 【前端詞典】4 種滾動吸頂實現方式的比較前端
- Android 禁止ViewPager左右滑動AndroidViewpager
- jmeter混合場景的多種實現方式比較JMeter
- Android之ViewPager+GridView實現GridView介面滑動AndroidViewpager
- IIS下PHP的三種配置方式比較PHP
- Spring IOC三種注入方式比較Spring
- Android 的滑動分析以及各種實現Android
- ViewPager實現左右無限迴圈滑動Viewpager
- ViewPager兩種方式實現無限輪播Viewpager
- Android可滑動Tab的3種實現方法Android
- PtrClassicFrameLayout與viewpager橫向滑動衝突的問題Viewpager
- 安卓開發:viewpager + fragment 實現滑動切換安卓ViewpagerFragment
- 兩種方式實現橫向滾動條
- css實現水平垂直居中的幾種方式CSS
- android可以無限迴圈滑動的ViewPagerAndroidViewpager
- LVS:三種負載均衡方式比較+另三種負載均衡方式負載
- LVS 三種負載均衡方式比較負載
- 使用ViewPager和TabLayout來實現滑動切換效果ViewpagerTabLayout
- 【前端詞典】5 種滾動吸頂實現方式的比較[效能升級版]前端
- merge into三種表連線方式的效能比較(一)
- iOS 可以縱向橫向滑動的表格實現iOS
- 水平垂直居中佈局的多種實現方式
- LVS-三種負載均衡方式比較負載
- 左右迴圈滑動的viewpagerViewpager
- 純CSS完美實現垂直水平居中的6種方式CSS
- COPA 獲利分析的兩種方式比較
- JS嵌入html的方式及各種方式的比較JSHTML
- 短視訊app開發,介面滑動到底的幾種實現方式APP
- 三種Singleton的實現方式
- UI介面微信底部(ViewPager實現Tab,左右滑動+底部點選)UIViewpager
- springMVC兩種方式實現多檔案上傳及效率比較SpringMVC
- 元素水平垂直居中三種方法實現
- Javascript中的幾種繼承方式比較JavaScript繼承
- java中四種操作xml方式的比較JavaXML
- 三行程式碼實現TabLayout+ViewPager的Tab滑動效果,從封裝到開源行程TabLayoutViewpager封裝
- Android實現Activity的滑動返回效果Android
- springAOP的三種實現方式Spring