6

私は GridLayoutManager を備えた RecyclerView を持っています (lib v7 をサポートしています)。アダプターを更新し、notifyItemMoved を作成します。アイテムの元の位置が画面上にあり、目的の位置も画面上にある場合、「移動アニメーション」が再生されます。項目が画面外の位置 (位置 1000、またはビューポートから離れた位置) にあり、ビューポートに移動した場合、「フェードイン アニメーション」で表示されます。

supportsPredictiveItemAnimations() が true を返すという事実にもかかわらず、予測アイテム アニメーションが機能していないようです。私は何か間違ったことをしていますか?いくつかのメソッドをオーバーライドして有効にする必要がありますか?

RecyclerView のソースコードを読んでいたところ、dispatchLayout メソッドの javadoc に次のように書かれています。

  • PERSISTENT ビューは移動されます ({@link ItemAnimator#animateMove(ViewHolder, int, int, int, int)})
  • REMOVED ビューは削除されます ({@link ItemAnimator#animateRemove(ViewHolder)})
  • ADDED ビューが追加されました ({@link ItemAnimator#animateAdd(ViewHolder)})
  • DISAPPEARING ビューが画面外に移動されました
  • APPEARING ビューが画面上で移動されます

それにもかかわらず、ItemAnimator は ADDED と APPEARING を区別しません。Predictife アニメーションを修正するか、少なくとも APPEARING アニメーションを「画面アニメーションの外から移動する」ように見せて、ADDED アニメーションをそのままにすることは可能ですか?

4

2 に答える 2

0

をオーバーライドして、マネージャーに予測アニメーション用の余分なスペースを提供することができgetExtraLayoutSpace(RecyclerView.State state)ますLinearLayoutManager

例 :

@Override
protected int getExtraLayoutSpace(RecyclerView.State state) {
    return getHeight(); // add extra page for better predictive animations
}

余分なスペースは、スクロール ビューの前のスクロール デルタに応じて、最初または最後に追加されます。詳細については、の実装をonLayoutChildren参照LinearLayoutManagerしてください。

于 2015-11-17T11:30:01.167 に答える