Android 仿抖音做的視訊下拉重新整理
最近專案中需要模仿抖音做一個視訊上拉重新整理的功能,我就突然想到了
SwipeRefreshLayout(這個控制元件),我先跟大家介紹一下這個控制元件:
一、SwipeRefreshLayout簡單介紹
先看以下官方文件,已有了很詳細的描述了。
官方文件說明這裡我再大概解釋一下:
在豎直滑動時想要重新整理頁面可以用SwipeRefreshLayout來實現。它通過設定OnRefreshListener來監聽介面的滑動從而實現重新整理。也可以通過一些方法來設定SwipeRefreshLayout是否可以重新整理。如:setRefreshing(true),展開重新整理動畫。
setRefreshing(false),取消重新整理動畫。setEnable(true)下拉重新整理將不可用。使用這個佈局要想達到重新整理的目的,需要在這個佈局裡包裹可以滑動的子控制元件,如ListView等,並且只能有一個子控制元件。
介紹總結:使用SwipeRefreshLayout可以實現下拉重新整理,前提是佈局裡需要包裹一個可以滑動的子控制元件,然後在程式碼裡設定OnRefreshListener設定監聽,最後在監聽裡設定重新整理時的資料獲取就可以了。由於是新出來的東西,所以要想使用,先把support library的版本升級到19.1或更新。
二、SwipeRefreshLayout主要方法介紹
翻看官方的文件,可以看到方法有很多,這裡只介紹五個經常用到的方法。
isRefreshing()
- 判斷當前的狀態是否是重新整理狀態。
setColorSchemeResources(int... colorResIds)
- 設定下拉進度條的顏色主題,引數為可變引數,並且是資源id,可以設定多種不同的顏色,每轉一圈就顯示一種顏色。
setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener)
- 設定監聽,需要重寫onRefresh()方法,頂部下拉時會呼叫這個方法,在裡面實現請求資料的邏輯,設定下拉進度條消失等等。
setProgressBackgroundColorSchemeResource(int colorRes)
- 設定下拉進度條的背景顏色,預設白色。
setRefreshing(boolean refreshing)
- 設定重新整理狀態,true表示正在重新整理,false表示取消重新整理。
那麼話就不多說了,直接開始了:
效果圖:
activity_listview佈局檔案
- <android.support.v4.widget.SwipeRefreshLayout
- android:id="@+id/sr1"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <ListView
- android:id="@+id/lv"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
- </android.support.v4.widget.SwipeRefreshLayout>
- publicclass ListViewActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
- private SwipeRefreshLayout swipeRefreshLayout;
- private ListView listView;
- private List<String> list;
- private ArrayAdapter adapter;
- @Override
- protectedvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_list_view);
- swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.sr1);
- swipeRefreshLayout.setOnRefreshListener(this);
- list = new ArrayList<>();
- for(int i = 0;i<10;i++){
- list.add("這是第"+i+"個數據");
- }
- listView = (ListView) findViewById(R.id.lv);
- adapter = new ArrayAdapter(this
- , android.R.layout.simple_list_item_1
- , android.R.id.text1
- , list);
- listView.setAdapter(adapter);
- }
- @Override
- publicvoid onRefresh() {
- new Handler().postDelayed(new Runnable() {
- @Override
- publicvoid run() {
- swipeRefreshLayout.setRefreshing(false);
- adapter.clear();
- list.add("這是第11個數據");
- adapter.notifyDataSetChanged();
- }
- }, 1000);
- }
- }