天天看點

界面無小事(八):RecyclerView增删item

界面無小事(一):RecyclerView+CardView了解一下 界面無小事(二):讓RecyclerView展示更多不同視圖 界面無小事(三):用RecyclerView + Toolbar做個檔案選擇器 界面無小事(四):來寫個滾動選擇器吧! 界面無小事(五):自定義TextView 界面無小事(六):來做個好看得側拉菜單! 界面無小事(七):使用代碼動态增删布局

目錄

  • 前言
  • 增删item
  • 自定義增删動畫
  • 最後

之前寫過一篇 代碼動态增删布局 的, 對比下這次的RecyclerView增删item, 說句實話, 代碼動态增删布局基本可以退群了.

當然首先你可以按照第一篇- 界面無小事(一): RecyclerView+CardView了解一下 建立基礎的RecyclerView. 這次的關鍵是在擴充卡代碼中加入增删item的操作. 要注意一點, 重新整理和原來在ListView的操作是不一樣的. 你可以直接看 官方文檔 , 大緻有這幾個:
  • notifyItemInserted()
  • notifyItemRemoved()
  • notifyItemMoved()
  • notifyItemChanged()
在擴充卡中加入如下代碼:
public void addData(int position) {
    mData.add(position, "hello python");
    notifyItemInserted(position);
}

public void removeData(int position) {
    mData.remove(position);
    notifyItemRemoved(position);
}
           
然後我們在toolbar中加上add和del按鈕, 對應這兩個方法.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/add"
        android:icon="@mipmap/ic_launcher"
        android:title="@string/add"
        app:showAsAction="never" />

    <item
        android:id="@+id/del"
        android:icon="@mipmap/ic_launcher"
        android:title="@string/del"
        app:showAsAction="never" />
</menu>
           
并且設定長按為删除操作, 點選是增加操作. 好了, 上效果圖:

效果圖

不單單是我示範的這種布局, 還有線型的, 橫向的, 瀑布流都可以有這種類似效果. 可參考 界面無小事(二): 讓RecyclerView展示更多不同視圖 .
那既然有預設動畫, 肯定就能自定義動畫了. 在這之前, 先說說幾個方法. 用來設定動畫的具體狀态的持續時間.
rvTest.getItemAnimator().setAddDuration(400);
rvTest.getItemAnimator().setRemoveDuration(400);
rvTest.getItemAnimator().setMoveDuration(400);
rvTest.getItemAnimator().setChangeDuration(400);
           

這裡借助 開源項目

. 因為這個項目真的足夠地棒.

自帶動畫個數都已經足夠用了, 見下. 你還可以繼續在這基礎上自定義. 是不是感覺三生萬物了.

Animators
分類 動畫類名
Cool LandingAnimator
Scale ScaleInAnimator, ScaleInTopAnimator, ScaleInBottomAnimator, ScaleInLeftAnimator, ScaleInRightAnimator
Fade FadeInAnimator, FadeInDownAnimator, FadeInUpAnimator, FadeInLeftAnimator, FadeInRightAnimator
Flip FlipInTopXAnimator, FlipInBottomXAnimator, FlipInLeftYAnimator, FlipInRightYAnimator
Slide SlideInLeftAnimator, SlideInRightAnimator, OvershootInLeftAnimator, OvershootInRightAnimator, SlideInUpAnimator, SlideInDownAnimator
而且非常難得的是使用方法還很簡單, 需要幾個步驟
  • 在Module的build.gradle中寫入
dependencies {
  implementation 'jp.wasabeef:recyclerview-animators:2.3.0'
}
           
  • 在Project的build.gradle中寫入
repositories {
    google()
    jcenter()
}
           
具體使用部分隻要用動畫類名替換之前預設的動畫類名即可. 例如:
rvTest.setAdapter(mAdapter);
rvTest.setItemAnimator(new SlideInLeftAnimator());
           
好了, 接下來看幾個效果圖吧:

SlideInLeftAnimator

ScaleInAnimator

喜歡記得點贊哦, 有意見或者建議評論區見, 暗中關注我也是可以的.