动画列表视图数据更改

时间:2012-11-15 10:49:17

标签: android listview animation

我在Android上使用一组填充ArrayList的数据(ListView)。在我更改排序模式时,我重新排序链接到适配器的数据,并调用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的东西。不应该这么难。

2 个答案:

答案 0 :(得分:11)

做了一个小例子,动画重新排序这样的列表。动画并不像你描述的那样,但希望它可以帮助你达到你想要的效果。

https://github.com/fabrantes/widgetexamples

流程是这样的:

  1. 在notifyDataSetChanged()之前保存当前状态。保存状态包括存储每个项目的getTop()坐标。
  2. 在notifyDataSetChange之后,浏览所有ListView视图并应用TranslateAnimation,其中包含新项目位置和旧位置之间的高度差。

答案 1 :(得分:3)

我希望这是解决问题的方法

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

        </ListView>

anim.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" />