В iOS есть очень простое и мощное средство для анимации добавления и удаления строк UITableView, здесь клип из видео youtube показывая анимацию по умолчанию. Обратите внимание, как окружающие строки обрушиваются на удаленную строку. Эта анимация помогает пользователям отслеживать, что изменилось в списке, и где в списке, который они искали, когда данные изменились.
Поскольку я разрабатывал Android, я не нашел эквивалентного средства для анимации отдельных строк в TableView. Вызов notifyDataSetChanged()
моего адаптера заставляет ListView немедленно обновлять его содержимое с помощью новой информации. Я хочу показать простую анимацию новой строки, которая будет нажата или сдвинется, когда данные изменятся, но я не могу найти документально подтвержденный способ сделать это. Похоже, LayoutAnimationController может содержать ключ, чтобы заставить это работать, но когда я устанавливаю LayoutAnimationController в свой ListView (аналогично ApiDemo LayoutAnimation2) и удалять элементы из моего адаптера после отображения списка, элементы сразу исчезают, а не становятся анимированными.
Я также пробовал следующие вещи для анимации отдельного элемента при его удалении:
@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 не обновляет свой макет, когда его элементы были размещены.
При написании моей собственной реализации /fork ListView это перешло мне в голову, это похоже на то, что не должно быть так сложно.
Спасибо!