RecyclerView.ItemAnimator

建立類別繼承RecyclerView.ItemAnimator
當項目新增調用。
public boolean animateAdd(final ViewHolder holder);
/*使用這個方法應該:
  1.停止任何之前視圖運行的動畫。
  2.為新增動畫註冊的視圖,不該在這做動畫,這方法將會被不同的方法當作目的。*/
當項目移除調用。
public boolean animateRemove(final ViewHolder holder)
/*使用這個方法應該: 
  1.停止任何之前視圖運行的動畫。
  2.為移除動畫註冊的視圖,不該在這做動畫,這方法將會被不同的方法當作目的。*/
當項目更新調用。
public boolean animateChange(ViewHolder oldHolder, ViewHolder newHolder,
                                 int fromX, int fromY, int toX, int toY)
/*使用這個方法應該: 
  1.停止任何之前視圖運行的動畫。
  2.為更新動畫註冊的視圖,不該在這做動畫,這方法將會被不同的方法當作目的。*/
當項目移動更新調用。
public boolean animateMove(final ViewHolder holder, int fromX, int fromY,
                               int toX, int toY)
/*使用這個方法應該: 
  1.停止任何之前視圖運行的動畫。
  2.為移動動畫註冊的視圖,不該在這做動畫,這方法將會被不同的方法當作目的。*/
主要製作動畫的方法。
public void runPendingAnimations() 
/*使用這個方法應該: 
  1.移除所有動畫。
  2.刪除完成移動動畫,使用getRemoveDuration拿到刪除動畫的持續時間,使用ViewCompat.postOnAnimationDelayed在指定的延遲後運行動畫。
  3.一旦刪除動畫,動畫動畫就完成了。使用getMoveDuration獲取移動動畫的持續時間。
  4.刪除動畫後,添加動畫,移動動畫和更改動畫已完成。使用getChangeDuration獲取更改動畫的持續時間。*/
動畫停止的方法。
public void endAnimation(RecyclerView.ViewHolder item)
//停止一個指定視圖的動畫
public void endAnimations()
//停止所有正在執行的動畫
使用官方DefaultItemAnimator進行修改達到不同效果。
主要是要對runPendingAnimations()的animateRemoveImpl、animateAddImpl、animateChangeImpl,使
用的ViewPropertyAnimatorCompat修改成不同方法。
//animateRemoveImpl
private void animateRemoveImpl(final ViewHolder holder) {
... 
ViewCompat.setPivotX(view, view.getWidth());
        animation.setDuration(getRemoveDuration())
                .scaleX(0).setListener(new VpaListenerAdapter() {
...}
//animateAddImpl
private void animateAddImpl(final ViewHolder holder) {
... 
        ViewCompat.setPivotX(view, 0f);
        ViewCompat.setScaleX(view, 0f);
        ViewCompat.setAlpha(view, 1f);

        final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view);
        animation.scaleX(1.0f).setDuration(getAddDuration()).
...}
//animateChangeImpl
private void animateChangeImpl(final ChangeInfo changeInfo) {
...
        ViewCompat.setPivotX(view, view.getWidth());
                oldViewAnim.scaleX(0).setListener(new VpaListenerAdapter() {
...}
...
ViewCompat.setPivotX(newView, 0f);
            ViewCompat.setScaleX(newView, 0f);
            newViewAnimation.translationX(0).translationY(0).scaleX(1f).setDuration(getChangeDuration()).
                    alpha(1).setListener(new VpaListenerAdapter() {
...}}