天天看點

使用LayoutAnimationController為RecyclerView添加動畫

@author:莫川

先看效果:首先是對linearlayoutmanager的recyclerview。

1.使用layoutanimationcontroller的8種動畫的播放效果

使用LayoutAnimationController為RecyclerView添加動畫

2.使用gridlayoutanimationcontroller的8種動畫的播放效果

使用LayoutAnimationController為RecyclerView添加動畫

比如實作從依次從左側進入的動畫效果,我們首先需要實作一個item的動畫效果,然後建立一個layoutanimationcontroller對象,并設定每一個item播放動畫的時間延時和item的播放順序。

以從左側進入為例,每個單獨的item的動畫如下:

1.item動畫

為了讓item看起來有‘彈性’效果,animationset添加了三個移動動畫,分别是從左側進入(-100%),移動到右側的10%,然後在從右側(10%)移動到左側(-10%),最後再從(-10%)移動到原本的位置(0%)。這樣就有了移動後的彈性效果。

2.設定layoutanimationcontroller的屬性

2.1 設定viewgroup的子view播放動畫之間的offset。

2.2 設定viewgroup的子view播放動畫的順序

setorder可以取值為layoutanimationcontroller.order_normal(正常順序),layoutanimationcontroller.order_random(随機順序)以及layoutanimationcontroller.order_reverse(逆序)。這裡的demo設定的是正常順序。

3.播放動畫

通過viewgroup.setlayoutanimation設定layout動畫。然後通知viewgroup重新繪制,調用schedulelayoutanimation方法播放動畫。

上述方法針對的是線性的recyclerview,也就是說recyclerview的layoutmanager設定的是linearlayoutmanager.

而對于使用gridlayoutmanager和staggeredgridlayoutmanager的recyclerview來說,我們需要使用gridlayoutanimationcontroller,其他步驟與layoutanimationcontroller一緻。

同樣的,仍然使用之前的animation建立gridlayoutanimationcontroller。

gridlayoutanimationcontroller的delay方法可以分别按照column和row次元進行設定。

本以為到此順利結束。運作後發現,會crash,log為:

為了解決這個問題,我們需要override recyclerview的attachlayoutanimationparameters方法:

通過layoutanimationcontroller或者gridlayoutanimationcontroller來實作recyclerview的動畫,非常簡單,而且效果很好。該方式不僅可以應用于recyclerview,而且還适用于listview、linearlayout、gridview等viewgroup。比如,如下是作用在一個linearlayout的效果。

使用LayoutAnimationController為RecyclerView添加動畫

繼續閱讀