欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android RecyclerView滑動刪除和拖動排序

 更新時間:2020年07月28日 08:35:02   作者:Fndroid  
這篇文章主要介紹了Android RecyclerView滑動刪除和拖動排序的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本篇是接著上面三篇之后的一個對RecyclerView的介紹,這里多說兩句,如果你還在使用ListView的話,可以放棄掉ListView了。RecyclerView自動幫我們緩存Item視圖(ViewHolder),允許我們自定義各種動作的動畫和分割線,允許我們對Item進行一些手勢操作。另外,因為Design庫的推出大大方便我們編寫帶有Material風(fēng)格的App,而ListView是不兼容這個庫的,比如滑動的相互協(xié)調(diào),只有RecyclerView能做到。

先看本篇內(nèi)容的效果圖:

效果內(nèi)容主要有三部分: 

•長按點擊其中一個Item之后可以將其拖動到其他地方
 •向左右滑動可以刪除某個Item
 •長按的時候會有一個浮起的動作,放下之后會重新重新對齊

①先易后難,卡片浮起效果  

在Material Design中,物件的呈現(xiàn)是以3d的模式來進行的,也就是在原來的基礎(chǔ)上增加了一個Z軸來表示物體的高度。 

 當我們點擊一個卡片的時候,應(yīng)該給予用戶一些反饋,讓用戶知道自己在操作這個卡片,也就是觸摸反饋。觸摸效果圖的觸摸反饋是先出現(xiàn)水波紋,接著當卡片可以移動的時候先浮動,再開始移動,最后下落,效果如下:(浮起的動畫可能要仔細看)

實現(xiàn):

水波紋效果使用系統(tǒng)提供的,因為Demo中使用的是一個CardView來呈現(xiàn)內(nèi)容,所以只需要給CardView加上兩個屬性即可:
 android:clickable="true"
 android:foreground="?android:attr/selectableItemBackground" 
 浮起和下沉的動畫也不難,改變View的translationZ屬性即可: 

private void pickUpAnimation(View view) {
 ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationZ", 1f, 10f);
 animator.setInterpolator(new DecelerateInterpolator());
 animator.setDuration(300);
 animator.start();
}

②滑動(Swipe)和移動(Move)Item
 Swipe是指我們上面的左右滑動刪除,Move則是我們對Item的移動,改變列表的排序。要實現(xiàn)這兩個功能,需要用到一個類ItemTouchHelper,當我們構(gòu)造好這個類之后,可以調(diào)用它的attachToRecyclerView方法將其綁定在某個RecyclerView中,當RecyclerView出現(xiàn)某些操作(滑動和移動)時,構(gòu)造這個類的時候傳入的回調(diào)類會回調(diào)相應(yīng)的方法,我們在這些方法中對數(shù)據(jù)集進行操作即可。
 new ItemTouchHelper(new ItemTouchHelper.Callback() {    //省略代碼
}).attachToRecyclerView(mRecyclerView); 

 接著就是重寫接口Callback的方法了,這里需要重寫的有幾個,分別是:
 •isItemViewSwipeEnable : Item是否可以滑動
 •isLongPressDragEnable :Item是否可以長按
 •getMovementFlags : 獲取移動標志
 •onMove : 當一個Item被另外的Item替代時回調(diào),也就是數(shù)據(jù)集的內(nèi)容順序改變
 •onMoved : 當onMove返回true的時候回調(diào)
 •onSwiped : 當某個Item被滑動離開屏幕之后回調(diào)
 •setSelectedChange : 某個Item被長按選中會被回調(diào),當某個被長按移動的Item被釋放時也調(diào)用 

new ItemTouchHelper(new ItemTouchHelper.Callback() {
 private RecyclerView.ViewHolder vh;

 @Override
 public boolean isItemViewSwipeEnabled() {
 return true;
 }

 @Override
 public boolean isLongPressDragEnabled() {
 return true;
 }

 @Override
 public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder
  viewHolder) {
 // 拖拽的標記,這里允許上下左右四個方向
 int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT |
  ItemTouchHelper.RIGHT;
 // 滑動的標記,這里允許左右滑動
 int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
 return makeMovementFlags(dragFlags, swipeFlags);
 }

 /*
 這個方法會在某個Item被拖動和移動的時候回調(diào),這里我們用來播放動畫,當viewHolder不為空時為選中狀態(tài)
 否則為釋放狀態(tài)
 */
 @Override
 public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
 super.onSelectedChanged(viewHolder, actionState);
 if (viewHolder != null) {
  vh = viewHolder;
  pickUpAnimation(viewHolder.itemView);
 } else {
  if (vh != null) {
  putDownAnimation(vh.itemView);
  }
 }
 }


 @Override
 public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
    RecyclerView.ViewHolder target) {
 // 移動時更改列表中對應(yīng)的位置并返回true
 Collections.swap(newsList, viewHolder.getAdapterPosition(), target
  .getAdapterPosition());
 return true;
 }

 /*
 當onMove返回true時調(diào)用
 */
 @Override
 public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int
  fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
 super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y);
 // 移動完成后刷新列表
 mAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target
  .getAdapterPosition());
 }

 @Override
 public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
 // 將數(shù)據(jù)集中的數(shù)據(jù)移除
 newsList.remove(viewHolder.getAdapterPosition());
 // 刷新列表
 mAdapter.notifyItemRemoved(viewHolder.getAdapterPosition());
 }
}).attachToRecyclerView(mRecyclerView);

這里直接貼出代碼,并做了注釋,應(yīng)該比較簡單了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 實現(xiàn)自定義圓形進度條的功能

    Android 實現(xiàn)自定義圓形進度條的功能

    這篇文章主要介紹了Android 實現(xiàn)自定義圓形進度條的功能的相關(guān)資料,開發(fā)Android應(yīng)用的朋友肯定對自定義View不陌生,很多都有重新寫的,這里就對實現(xiàn)圓形進度條介紹下,需要的朋友可以參考下
    2016-11-11
  • android實現(xiàn)接通和掛斷電話

    android實現(xiàn)接通和掛斷電話

    這篇文章主要為大家詳細介紹了android實現(xiàn)接通和掛斷電話功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android Studio實現(xiàn)單選對話框

    Android Studio實現(xiàn)單選對話框

    這篇文章主要為大家詳細介紹了Android Studio實現(xiàn)單選對話框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 深入解析Android中的RecyclerView組件

    深入解析Android中的RecyclerView組件

    RecyclerView是Android 5.0以來新加入的組件,被廣泛認為是ListView的替代品,這里我們就結(jié)合理論與實踐來深入解析Android中的RecyclerView組件:
    2016-06-06
  • Android 邊播邊緩存的實現(xiàn)(MP4 未加密m3u8)

    Android 邊播邊緩存的實現(xiàn)(MP4 未加密m3u8)

    這篇文章主要介紹了Android 邊播邊緩存的實現(xiàn)(MP4 未加密m3u8),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Android Intent發(fā)送廣播消息實例詳解

    Android Intent發(fā)送廣播消息實例詳解

    這篇文章主要介紹了Android Intent發(fā)送廣播消息實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • AndroidStudio4.1 自定義模板的使用方法

    AndroidStudio4.1 自定義模板的使用方法

    這篇文章主要介紹了AndroidStudio4.1 自定義模板的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Android實現(xiàn)動畫效果的自定義下拉菜單功能

    Android實現(xiàn)動畫效果的自定義下拉菜單功能

    這篇文章主要介紹了Android實現(xiàn)動畫效果的自定義下拉菜單功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Gradle配置教程之自定義APK名稱與輸出路徑

    Gradle配置教程之自定義APK名稱與輸出路徑

    Gradle是一個基于JVM的富有突破性構(gòu)建工具,下面這篇文章主要給大家介紹了關(guān)于Gradle配置教程之自定義APK名稱與輸出路徑的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Android中使用GridView和ImageViewSwitcher實現(xiàn)電子相冊簡單功能實例

    Android中使用GridView和ImageViewSwitcher實現(xiàn)電子相冊簡單功能實例

    本篇文章主要介紹了Android中使用GridView和ImageViewSwitcher實現(xiàn)電子相冊簡單功能實例,具有一定的參考價值,有需要的可以了解一下。
    2016-12-12

最新評論