2014-06-07 128 views
12

我對Android非常陌生,我正在探索谷歌網站上的示例代碼。我目前使用的代碼是SwipeRefreshLayout:http://developer.android.com/samples/SwipeRefreshLayoutBasic/index.htmlSwipeRefreshLayout:滑動進度動畫

在代碼中,我們看到爲列表視圖執行SwipeRefreshLayout,換句話說,如果您向下拖動列表視圖,該方法被觸發並且列表視圖自我刷新。

<android.support.v4.widget.SwipeRefreshLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/swiperefresh" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

</android.support.v4.widget.SwipeRefreshLayout> 

什麼是困惑我的是,有在該得到的,當你向下拖動列表視圖的頂部顯示的進度動畫條的代碼沒有佈局。您是否認爲SwipeRefreshLayout自動生成一個進度動畫欄,而不需要用戶在xml中爲其指定任何佈局?

例如,如果想要在進度動畫欄的兩端填充填充,以便在刷新時動畫不會觸摸屏幕的末端,那麼將如何進行?

https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html對此沒有任何說法。

回答

24

不能改變動畫。

SwipeRefreshLayout你不能自定義很多;我相信這是Google試圖讓開發人員堅持常見模式的嘗試。你可以風格的是動畫的四種顏色,用setColorScheme()指定。

SwipeRefreshLayout負責在您的頂部顯示其預定義的動畫。這可能是canChildScrollUp()返回false並且用戶'拉下來',或者當您設置setRefreshing(true)時。用setRefreshing(false)關閉動畫。把你的邏輯放在聽衆的方法onRefreshing()中。如果您在SwipeRefreshLayout中放置了非ListView,請覆蓋canChildScrollUp()。你應該很好從這裏出發。

+0

謝謝。我認爲你是對的,除了設置進度條的顏色外,沒有什麼可以自定義的。你還知道SwipeRefreshLayout類是否自動爲列表視圖操作notifyDataChanged()方法?在用戶通過mListAdapter.add(cheese)方法下拉3秒鐘後,listview會自動刷新,但notifyDataChanged()方法從未被調用來通知列表視圖對其數據所做的更改。 – Simon

+0

不,它不。您可以檢查自己的代碼,在您的sdk目錄中搜索'SwipeRefreshLayout.java'。您需要安裝支持v4庫的最新版本(修訂19.1.0) –

+0

的源代碼所以我猜想listview是從數據添加到適配器時自動刷新的:mListAdapter.add(cheese)? – Simon

10

雖然你不能改變它,你仍然可以將其隱藏,然後顯示自己一度引發:-)

SwipeRefreshLayout swiperefresh = (SwipeRefreshLayout)root.findViewById(R.id.swiperefresh); 
swiperefresh.setOnRefreshListener(this); 
swiperefresh.setColorSchemeColors(0,0,0,0); 
swiperefresh.setProgressBackgroundColor(android.R.color.transparent); 

注:

  • 在Eclipse中必須添加@ SuppressLint(「ResourceAsColor」)來編譯這個。

  • 您仍然需要在適當的時間點調用setRefreshing(false)否則onRefresh不會再次觸發。