17

私は Android に取り組んでおりArrayListListView. 並べ替えモードを変更した瞬間に、アダプターにリンクされたデータを並べ替え、呼び出しnotifyOnDataChanged()てリストを更新します。

これでうまくいきますが、両方のデータセットに同じアイテムが含まれているため、各アイテムを新しい位置 (iOS のように) にアニメーション化できるようにしたいと考えています。

これをどのようにアニメーション化するかを考えた結果、リストの下の方に表示されるすべてのアイテムを高さゼロにアニメーション化してから、新しい位置で通常のサイズにアニメーション化することにしました。これにより、データ内で上に移動するすべてのアイテムが実際にリスト内で上に移動し、アイテムが上に消えるようになります。それがアイデアですが、それを実装する方法がわかりません。

データは次のように表すことができます。

Set A | index | Set B
------+-------+------
A     | 0     | B
B     | 1     | A
C     | 2     | C
D     | 3     | F
E     | 4     | G
F     | 5     | E
G     | 6     | D

iOS がデフォルトで Android 用に処理するものを探しています。そんなに難しくないはずです。

4

2 に答える 2

11

このようなリストの並べ替えをアニメーション化する小さな例を作成しました。アニメーションはあなたが説明したとおりではありませんが、あなたが望むものを達成するのに役立つことを願っています.

https://github.com/fabrantes/widgetexamples

流れは次のようなものです。

  1. notifyDataSetChanged() の前に現在の状態を保存します。状態を保存するには、各アイテムの getTop() 座標を保存します。
  2. notifyDataSetChange の後、すべての ListView ビューを調べて、新しいアイテムの位置と古い位置の高さの差で TranslateAnimation を適用します。
于 2013-03-01T15:17:49.870 に答える
3

これがあなたの問題の解決策であることを願っています

  <ListView
            android:id="@+id/listUniversal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layoutAnimation="@anim/controller">

        </ListView>

アニメ.xml

<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/scale_1"
    android:delay="50%" />

scale_1.xml

<scale
    android:duration="200"
    android:fromXScale="0.1"
    android:fromYScale="0.1"
    android:pivotX="10%"
    android:pivotY="10%"
    android:startOffset="100"
    android:toXScale="1"
    android:toYScale="1.0" />

于 2013-03-04T14:13:57.627 に答える