android 使用ViewFlow實現左右滑動

來源:互聯網
上載者:User

是的,你沒看錯,是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.ViewFlowandroid: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() {    publicvoid
onSwitched(View v,
int position){    // Your code here    }});

當然,你也可以使用該庫中的FlowIndicator為你在多個view中切換時提供一個指標,目前該庫已經實現了兩種指標:一種是圓點指標FlowIndicator;另一種是標題指標TitleFlowIndicator。

2、使用圓點指標

圓點指標可以這樣使用:
先在layout中這樣定義

1234 <</CODE>org.taptwo.android.widget.CircleFlowIndicatorandroid: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.TitleFlowIndicatorandroid: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 voidonConfigurationChanged(ConfigurationnewConfig) {     super.onConfigurationChanged(newConfig);     viewFlow.onConfigurationChanged(newConfig); }
二、實現了自動播放和迴圈的ViewFlow

網友靈台斜月對ViewFlow實現了改進,增加了自動播放功能和迴圈功能。這裡可以下載工程代碼。

滑動迴圈功能通過在adapter的getcount方法要返回Integer.Max_value。然後在getview方法中,由於position不斷遞增,可以取餘數。並調用viewflow.setSelection(3*圖片數)來實現迴圈。

自動播放是通過如下代碼實現的:

1234567891011121314 //通過延遲訊息實現自動播放,使用時通過調用該方法來啟動自動播放功能 public voidstartAutoFlowTimer(){           handler=
new Handler(){           @Override            publicvoid
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。還可以學習下如何設定自訂群組件的屬性。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.