1. 程式人生 > >Android 仿抖音做的視訊下拉重新整理

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佈局檔案

  1. <android.support.v4.widget.SwipeRefreshLayout  
  2.              android:id="@+id/sr1"
  3.              android:layout_width="match_parent"
  4.             android:layout_height="match_parent">  
  5.              <ListView  
  6.                  android:id="@+id/lv"
  7.                  android:layout_width="match_parent"
  8.                  android:layout_height="wrap_content"/>  
  9.          </android.support.v4.widget.SwipeRefreshLayout>  
Activity程式碼(ListViewActivity)
  1. publicclass ListViewActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {  
  2.     private SwipeRefreshLayout swipeRefreshLayout;  
  3.     private ListView listView;  
  4.     private List<String> list;  
  5.     private ArrayAdapter adapter;  
  6.     @Override
  7.     protectedvoid onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_list_view);  
  10.         swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.sr1);  
  11.         swipeRefreshLayout.setOnRefreshListener(this);  
  12.         list = new ArrayList<>(); 
  13.         for(int i = 0;i<10;i++){
  14.            list.add("這是第"+i+"個數據");
  15.         }
  16.         listView = (ListView) findViewById(R.id.lv);  
  17.         adapter = new ArrayAdapter(this
  18.                 , android.R.layout.simple_list_item_1  
  19.                 , android.R.id.text1  
  20.                 , list);  
  21.         listView.setAdapter(adapter);  
  22.     }  
  23.     @Override
  24.     publicvoid onRefresh() {  
  25.         new Handler().postDelayed(new Runnable() {  
  26.             @Override
  27.             publicvoid run() {  
  28.                 swipeRefreshLayout.setRefreshing(false);  
  29.                 adapter.clear();  
  30.                 list.add("這是第11個數據");  
  31.                 adapter.notifyDataSetChanged();  
  32.             }  
  33.         }, 1000);  
  34.     }