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

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

Solutions Collecting From Web of "Анимация изменения списка просмотров"

Сделал небольшой пример, который оживляет переупорядочение такого списка. Анимация не совсем так, как вы описали, но, надеюсь, она поможет вам достичь того, чего вы хотите.

https://github.com/fabrantes/widgetexamples

Поток выглядит примерно так:

  1. Сохраните текущее состояние перед notifyDataSetChanged (). Сохранение состояния состоит в сохранении координаты getTop () для каждого элемента.
  2. После notifyDataSetChange просмотрите все виды ListView и примените TranslateAnimation с разностью высот между позицией нового элемента и старой позицией.

Я надеюсь, что это решение ваших проблем

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