是的,你沒看錯,是ViewFlow,不是ViewPager,也不是ViewFlipper。ViewFlow是一個開源的androidUI庫。它提供了三個組件ViewFlow、FlowIndicator和TitleFlowIndicator。它使得由Adapter產生的ViewGroup中的View可以水平滑動。
一、使用ViewFlow庫
那麼什麼時候可以使用這個組件呢?文檔上說,當你需要在一系列不確定數目的view中滑動時,可以考慮使用ViewFlow。如果你的view數目確定,你應該使用Fragments或相容庫裡的ViewPager。
1、使用ViewFlow
怎麼使用呢?首先在你的layout檔案中加入:
1234 |
<</CODE>org.taptwo.android.widget.ViewFlow android:id = "@+id/viewflow" app:sidebuffer = "5" /> |
其中app:sidebuffer屬性是ViewFlow組件自訂的,使用這些屬性時,需要增加如下的xml的命名空間:
1 |
xmlns:app="http://schemas.android.com/apk/res/your.application.package.here" |
然後在你的Activity裡面添加如下代碼用於使用ViewFlow:
12345678910 |
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。
2、使用圓點指標
圓點指標可以這樣使用:
先在layout中這樣定義
1234 |
<</CODE>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中調用它
123 |
CircleFlowIndicator indic =(CircleFlowIndicator) findViewById(R.id.viewflowindic); viewFlow.setFlowIndicator(indic); |
圓點指標還支援activeColor、inactiveColor、activeType(填充或描邊)、inactiveType(填充或描邊)、fadeOut(設定圓點自動隱藏的秒數,若為0則不會自動隱藏)、radius(圓點的半徑)等。
3、使用標題指標
標題指標也是先layout裡定義:
1234567891011 |
<</CODE>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中調用它:
1234 |
TitleFlowIndicator indicator =(TitleFlowIndicator) findViewById(R.id.viewflowindic); indicator.setTitleProvider(myTitleProvider); viewFlow.setFlowIndicator(indicator); |
OK,以上就是ViewFlow庫提供三大組件及其用法(來自其文檔),當然你也可以把該組件庫打包成jar調用。
要注意的是,如果你使用的androidsdk版本是android2.2以下,最好在activity中加上如下方法
12345 |
@Override public void onConfigurationChanged(ConfigurationnewConfig) { super .onConfigurationChanged(newConfig); viewFlow.onConfigurationChanged(newConfig); } |
二、實現了自動播放和迴圈的ViewFlow
網友靈台斜月對ViewFlow實現了改進,增加了自動播放功能和迴圈功能。這裡可以下載工程代碼。
滑動迴圈功能通過在adapter的getcount方法要返回Integer.Max_value。然後在getview方法中,由於position不斷遞增,可以取餘數。並調用viewflow.setSelection(3*圖片數)來實現迴圈。
自動播放是通過如下代碼實現的:
1234567891011121314 |
//通過延遲訊息實現自動播放,使用時通過調用該方法來啟動自動播放功能 public void startAutoFlowTimer(){ handler=
new Handler(){ @Override public void
handleMessage(Message msg) { snapToScreen((mCurrentScreen+ 1 )%getChildCount()); Messagemessage = handler.obtainMessage( 0 ); sendMessageDelayed(message,timeSpan); } }; Messagemessage = handler.obtainMessage( 0 ); handler.sendMessageDelayed(message,timeSpan); } |
另外,原ViewFlow內建的例子在這裡,直接down的代碼無法使用,這個代碼可以直接匯入。裡面有4個例子,分別展示了帶圓點指標的ViewFlow、帶標題指標的ViewFlow、view結構不同的ViewFlow及非同步載入view的ViewFlow。還可以學習下如何設定自訂群組件的屬性。