@author:莫川
先看效果:首先是對linearlayoutmanager的recyclerview。
1.使用layoutanimationcontroller的8種動畫的播放效果

2.使用gridlayoutanimationcontroller的8種動畫的播放效果
比如實作從依次從左側進入的動畫效果,我們首先需要實作一個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的效果。