3

Androidでは、現在、クリックするとアイテムの高さが変化するリストを作成しようとしています。そのアイテムの下のすべてのビューは、高さの変化に応じて上下にアニメーション化されます。LinearLayout内のアイテムの「リスト」で次のコードを使用して成功しました:

LayoutTransition t = new LayoutTransition();
t.enableTransitionType(LayoutTransition.CHANGING);
myLinearLayout.setLayoutTransition(t);

ただし、この LayoutTransition を LinearLayout ではなく ListView に適用しようとすると、クリックされたアイテムの高さがアニメーション化されますが、その下のすべてのアイテムが即座に新しい位置にジャンプします。クリックしたアイテムで残りのビューをアニメーション化するにはどうすればよいですか?

4

1 に答える 1

1

これは簡単にはできません (もっと良い方法があります)。ListView 行の位置は、AdapterView によって固定および制御されます。

少し調べてみました。まず、CHANGING アニメーションを起動するには、通常のように行を削除することはできません (アダプターからアイテムを削除する)。可視性を GONE に設定してアイテムを非表示にする必要があります。そうすると、DISAPPEARING アニメーションが発生し、その結果 CHANGING アニメーションが発生します。ただし、CHANGING アニメーションを使用できるようにするには、行の高さを変更するときにいつでも (ListView で) レイアウトを要求する必要があります。アニメーションの最後に、アダプターからアイテムを削除して、ListView を再描画できます。さらに、すべての ListView を再描画しないように、行の ID をその位置で安定させることができます。このようにしようとしましたが、さまざまなバージョンの Android API で複雑な問題が発生しました。

最終的に、LayoutTransition を使用して ListView にアニメーションを実装することは可能ですが、これは複雑であり、実装の観点からは価値がありません。単純なケースでは十分ですが、ListView のより複雑なアニメーションでは不十分です。アニメーションを実装するには、既にクックされたコンポーネントを使用することをお勧めします: https://github.com/nhaarman/ListViewAnimations

于 2014-12-16T11:53:35.717 に答える