W iOS istnieje bardzo łatwa i wydajna funkcja do animowania dodawania i usuwania wierszy UITableView, oto klip z filmu na YouTube pokazujący domyślną animację. Zwróć uwagę, jak otaczające rzędy zapadają się na usunięty wiersz. Ta animacja pomaga użytkownikom śledzić, co zmieniło się na liście i gdzie na liście patrzyli, kiedy zmieniły się dane.
Odkąd pracuję na Androidzie, nie znalazłem odpowiedniego narzędzia do animowania pojedynczych wierszy w TableView . Wywołanie notifyDataSetChanged()
mojego adaptera powoduje, że ListView natychmiast aktualizuje swoją zawartość o nowe informacje. Chciałbym pokazać prostą animację nowego wiersza wciskającego się lub wysuwającego, gdy zmieniają się dane, ale nie mogę znaleźć żadnego udokumentowanego sposobu, aby to zrobić. Wygląda na to, że LayoutAnimationController może mieć klucz do uruchomienia tego, ale kiedy ustawię LayoutAnimationController na moim ListView (podobnie do LayoutAnimation2 ApiDemo ) i usuwam elementy z mojego adaptera po wyświetleniu listy, elementy znikają natychmiast, zamiast zostać animowane .
Próbowałem też wykonać następujące czynności, aby animować pojedynczy element po jego usunięciu:
@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);
}
Jednak rzędy otaczające animowany rząd nie zmieniają pozycji, dopóki nie zostaną przeskoczone na nowe pozycje, gdy notifyDataSetChanged()
zostanie wywołane. Wygląda na to, że ListView nie aktualizuje swojego układu po umieszczeniu jego elementów.
Podczas pisania własnej implementacji / rozwidlenia ListView przyszło mi do głowy, wydaje się, że nie powinno to być takie trudne.
Dzięki!