iOSには、UITableView行の追加と削除をアニメーション化するための非常に簡単で強力な機能があります。これは、デフォルトのアニメーションを示すYouTubeビデオのクリップです。周囲の行が削除された行にどのように折りたたまれているかに注意してください。このアニメーションは、ユーザーがリストで何が変更されたか、データが変更されたときにリストのどこを見ているかを追跡するのに役立ちます。
私はAndroidで開発してきたので、TableViewの個々の行をアニメーション化する同等の機能を見つけられませんでした。notifyDataSetChanged()
アダプタを呼び出すと、ListViewはそのコンテンツを新しい情報ですぐに更新します。データが変更されたときに新しい行が押し込まれるか、またはスライドする簡単なアニメーションを表示したいのですが、これを行うための文書化された方法が見つかりません。LayoutAnimationControllerがこれを機能させるためのキーを保持しているように見えますが、ListViewにLayoutAnimationControllerを設定し(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はレイアウトを更新しないようです。
ListViewの独自の実装/フォークを作成することは私の心を超えましたが、これはそれほど難しいことではないようです。
ありがとう!