В iOS есть очень простое и мощное средство для анимации добавления и удаления строк UITableView, вот клип из видео на YouTube , показывающий анимацию по умолчанию. Обратите внимание, как окружающие строки сворачиваются в удаленную строку. Эта анимация помогает пользователям отслеживать, что изменилось в списке и где они находились в списке при изменении данных.
Поскольку я разрабатывал для Android, я не нашел эквивалентного средства для анимации отдельных строк в TableView . Вызов notifyDataSetChanged()
на моем адаптере приводит к тому, что ListView немедленно обновляет свое содержимое новой информацией. Я хотел бы показать простую анимацию новой строки, которая сдвигается или сдвигается при изменении данных, но я не могу найти никакого документированного способа сделать это. Похоже, что LayoutAnimationController может содержать ключ к тому, чтобы заставить это работать, но когда я устанавливаю LayoutAnimationController в моем ListView (аналогично LayoutAnimation2 в ApiDemo) и удаляю элементы из моего адаптера после списка элементы исчезают сразу, вместо того, чтобы их оживить.
Я также пробовал что-то вроде следующего, чтобы оживить отдельный элемент при его удалении:
@Override
protected void onListItemClick(ListView l, View v, final int position, long id) {
Animation animation = new ScaleAnimation(1, 1, 1, 0);
animation.setDuration(100);
getListView().getChildAt(position).startAnimation(animation);
l.postDelayed(new Runnable() {
public void run() {
mStringList.remove(position);
mAdapter.notifyDataSetChanged();
}
}, 100);
}
Однако строки, окружающие анимированный ряд, не перемещаются, пока не перейдут на свои новые позиции при вызове notifyDataSetChanged()
. Похоже, ListView не обновляет свой макет после размещения его элементов.
Хотя написание моей собственной реализации / форка ListView приходило мне в голову, это кажется чем-то, что не должно быть таким сложным.
Спасибо!