Анимация изменения списка просмотров
Я работаю над 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. Это не должно быть так сложно.
Ответы
Ответ 1
Сделал небольшой пример, который оживляет переупорядочение такого списка. Анимация не совсем так, как вы описали, но, надеюсь, она поможет вам достичь того, чего вы хотите.
https://github.com/fabrantes/widgetexamples
Поток выглядит примерно так:
- Сохранить текущее состояние перед notifyDataSetChanged(). Сохранение состояния состоит в сохранении координаты getTop() для каждого элемента.
- После notifyDataSetChange просмотрите все представления ListView и примените TranslateAnimation с разницей в высоте между позицией нового элемента и старой позицией.
Ответ 2
Надеюсь, это решение ваших проблем.
<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" />