SwipeRefreshLayout作為谷歌官方推薦的下拉刷新控件,同時簡單而又不失優雅的風格,讓許多app都使用了這一控件,今天記錄下SwipeRefreshLayout在項目中的實際運用。
首先,我們在布局文件中使用:
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</android.support.v4.widget.SwipeRefreshLayout>
注意,將listview或者recyclerview放在SwipeRefreshLayout內,這樣,我們一個簡單的布局就完成了。
現在我們可以運行試試效果。
Screenshot_1553658047.png
一個黑不拉幾的下拉樣式就出來啦,有人肯定會覺得不對啊,這個怎么一直轉,還是黑色的,別急,我們慢慢來
設置SwipeRefreshLayout 的顏色
我們先在res/values/color中定義好幾個顏色
<color name="blue">#5BC0DE</color>
<color name="red">#FF4081</color>
<color name="black">#000000</color>
然后在java代碼中設置顏色:
swipeRefreshLayout.setColorSchemeResources(R.color.blue);
接下來讓我們運行看看:
Screenshot_1553658583.png
我們成功改變了下拉樣式的顏色,而且可以支持三種顏色變換哦
swipeRefreshLayout.setColorSchemeResources(R.color.blue,R.color.red,R.color.black);
設置SwipeRefreshLayout 下拉刷新功能的實現
這個下拉為啥一直在轉呢?因為我們還沒在代碼中設置它的停止,按邏輯來說,我們將在發起數據請求后,服務器做出回應或者一定時間沒有得到回應后,將動畫取消。讓我們先看看SwipeRefreshLayout 的回調方法
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
//這里獲取數據的邏輯
swipeRefreshLayout.setRefreshing(false);
}
});
swipeRefreshLayout.setRefreshing(false)這句話傳入一個布爾變量,false代表停止執行,這樣,當我們執行完畢獲取數據的過程后,就可以將一直轉的下拉動畫給取消掉啦,而且呢, swipeRefreshLayout.setRefreshing()這個方法也可以實現第一次打開頁面自動下拉刷新的邏輯,具體實現請問度娘。
SwipeRefreshLayout 的其他幾個方法
//設置進度View樣式的大小,只有兩個值DEFAULT和LARGE,表示默認和較大
swipeRefreshLayout.setSize(DEFAULT);
//設置觸發下拉刷新的距離
swipeRefreshLayout.setDistanceToTriggerSync(300);
//設置動畫樣式下拉的起始點和結束點,scale 是指設置是否需要放大或者縮小動畫。
swipeRefreshLayout.setProgressViewOffset(boolean scale, int start, int end)
//設置動畫樣式下拉的結束點,scale 是指設置是否需要放大或者縮小動畫
swipeRefreshLayout.setProgressViewEndTarget(boolean scale, int end);
//如果自定義了swipeRefreshLayout,可以通過這個回調方法決定是否可以滑動。
setOnChildScrollUpCallback(@Nullable OnChildScrollUpCallback callback)
本文為原創,轉載請標明出處。