39

グリッドに動的に追加または削除できるレイアウトの GridView があります。

iOS では、GridView 項目のネイティブ動作は、グリッド内の他の項目が削除された項目の場所にスライドするか、新しい項目が追加されたときにスライドしてスペースを空けることです。

ただし、Android では、変更が画面に即座に表示されるだけの動作です。GridView のアダプターでいくつかのトリックを使用して、各 getView() 呼び出しにカスタム アニメーションを追加しようとしましたが、最終的に次のような問題が発生しました。

データセットが変更されたときに、後のインデックスのスロットに0のインデックス付きアイテムをロードするAndroid GridView

アダプターの getView() メソッドではなく、個々のビューでアニメーションを制御しようとしましたが、最終結果は同じでした。

また、次のように GridLayoutAnimationController を使用してみました。

Animation animation = AnimationUtils.loadAnimation(mActivity, R.anim.grid_item_fadein);
GridLayoutAnimationController controller = new GridLayoutAnimationController(animation, .2f, .2f);
mGrid.setLayoutAnimation(controller);

これは、すべての GridView コンテンツの初期読み込みで機能しますが、そのコンテンツへの変更は、既定のように即座に反映されます。

これは非常にシンプルな機能だと思います。もっと簡単な方法があるはずです。オンラインで検索して見た中で最高のものは、グリッド内の場所を入れ替える GridView アイテムをアニメーション化するライブラリですが、それは私が探しているものではありません (同じライブラリで、削除によってグリッドからアイテムを削除すると私が回避しようとしているのと同じ即時効果が発生します)。

私が見た SO に関する一般的な回答は、「APIDemo を見てください。例がたくさんあります」です。しかし、私が見る限り、GridView コンテンツの変更をアニメーション化する例は実際にはありません。

どんな助けでも大歓迎です、ありがとう。

4

4 に答える 4

4

.remove() などの GridView に変更を加えた後、mGrid.startLayoutAnimation();を呼び出す必要があります。

GridView は自動的にそれを行いません。手動でトリガーする必要があります;-)

于 2014-06-12T11:21:49.933 に答える