Подтвердить что ты не робот

Анимация изменения списка просмотров

Я работаю над 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. Это не должно быть так сложно.

4b9b3361

Ответ 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" />