【Android】RecyclerViewの移動アニメーションをオフにする方法
RecyclerViewにはデフォルトでアニメーションが設定されており、アイテムの順番が変わった時などに移動アニメーションが行われるかと思います。
アニメーションがあると切り替わりが視覚的にわかるので便利である一方、アニメーションをなくしたいなと思う場面もあるかと思います。
そこで今回は、RecyclerViewの移動アニメーションをオフにする方法を2つほどご紹介したいと思います。
※ 移動アニメーションは↓の並び替え時のアニメーションを指しています。
①. itemAnimator
に null
をセットする方法
一番手っ取り早い方法です。
そもそもRecyclerViewにはデフォルトで itemAnimator
に DefaultItemAnimator というのがセットされており、それがアニメーションを提供しています。
なので itemAnimator
に null
をセットし DefaultItemAnimator
を使わないようにすることでアニメーションをオフにする形です。
val recyclerView = ...
recyclerView.itemAnimator = null // nullをセット
このようにすると、アイテムの順番が変わった際にアニメーションが走らず、パッと切り替わるようになります。
②. DefaultItemAnimator
を使いつつ、移動アニメーションだけオフにする方法
①の方法が手っ取り早く楽なのですが、 DefaultItemAnimator
には移動アニメーション以外にも、アイテムを表示する際のアルファのアニメーションもあったりするので、全部をオフにするとアイテム表示時にやや唐突な印象を与えてしまうかもしれません。
そこで、DefaultItemAnimator
は使いつつ、移動アニメーションだけをオフにしてみます。
DefaultItemAnimator
の無名クラスを itemAnimator
にセットし、 animateMove
というのをオーバーライドしてあげます。
val recyclerView = ...
recyclerView.itemAnimator = object : DefaultItemAnimator() {
override fun animateMove(holder: RecyclerView.ViewHolder?, fromX: Int, fromY: Int, toX: Int, toY: Int): Boolean {
dispatchMoveFinished(holder) // これは呼んだほうがいいらしい
return false // falseで返すことで後続の処理を呼ばないように指定
}
}
このようにすると、移動アニメーションに関しては①と変わらずですが、RecyclerViewにアイテムが最初に表示される時にアルファのアニメーションが走るようになります。(gifが若干わかりにくいですが…)
①の時 | ②の時 |
---|---|
以上、RecyclerViewの移動アニメーションをオフにする方法を2つご紹介しました。
他のやり方・もっといいやり方などご存じの方がいらっしゃいましたら、コメントなどいただけると嬉しいです。
Author And Source
この問題について(【Android】RecyclerViewの移動アニメーションをオフにする方法), 我々は、より多くの情報をここで見つけました https://qiita.com/tsumuchan/items/fb5d25ed998c9e76bed1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .