スクロールするときに RecyclerView の要素をアニメーション化する方法はありますか?
DefaultItemAnimator
とを調べましRecyclerView.ItemAnimator
たが、アニメーションはデータセットが変更された場合にのみ呼び出されるようです。間違っている場合は修正してください。
私RecyclerView.ItemAnimator.animateMove()
はそれがいつ呼ばれるかについて少し混乱していますか?そのクラスにいくつかのブレークポイントを設定しましたが、どれもアプリを停止しません。
しかし、私の質問に戻って、どうすれば RecyclerView をアニメーション化できますか? いくつかのカスタムルールに応じて、いくつかの要素に別の不透明度を持たせたい.
アニメーションの動きはまさに私が探しているものであるようです。そのメソッドは から呼び出されdispatchLayout()
ます。そのメソッドの javadoc は次のとおりです。
レイアウトによるアニメーションの変更を処理する layoutChildren() のラッパー。アニメーションは、再生中の 5 種類のアイテムがあることを前提として動作します:
PERSISTENT: アイテムはレイアウトの前後に表示されます
REMOVED: アイテムはレイアウト前に表示され、アプリによって削除されました
ADDED: アイテムはレイアウト前には存在せず、アプリによって追加されましたアプリ
DISAPPEARING: アイテムは前後にデータ セットに存在しますが、レイアウトの過程で可視から非可視に変更されました (それらは他の変更の副作用として画面外に移動されました)
APPEARING: データ セットにアイテムが存在します前/後、しかしレイアウトの過程で非表示から表示に変更されました(他の変更の副作用として画面上に移動されました)
全体的なアプローチでは、レイアウトの前後にどのアイテムが存在するかを把握し、各アイテムについて上記の 5 つの状態のいずれかを推測します。次に、アニメーションがそれに応じて設定されます:
PERSISTENT ビューが移動されます ({@link ItemAnimator#animateMove(ViewHolder, int, int, int, int)}) REMOVED ビューが削除されます ({@link ItemAnimator#animateRemove(ViewHolder)})
ADDED ビューが追加されます ({@link ItemAnimator#animateAdd(ViewHolder)})
DISAPPEARING ビューが画面外に移動されます
APPEARING ビューが画面上に移動されます
これまでのところ、私は PERSISTENT、DISAPPEARING、および APPEARING を探していますが、この行のためにそのメソッドが呼び出されることはありません:
boolean animateChangesSimple = mItemAnimator != null && mItemsAddedOrRemoved
&& !mItemsChanged;
mItemsAddedOrRemoved
は単純に常に false であるため、そのコールバックには到達しません。セットフラグを正しく設定する方法はありますか?