[解決済み】Android ListViewの行の追加・削除をアニメーション化する方法
質問
iOSでは、UITableViewの行の追加と削除をアニメーション化する、非常に簡単で強力な機能があります。 以下はYoutubeの動画です。 デフォルトのアニメーションを表示します。 削除された行の上に、周囲の行が重なっていく様子にご注目ください。 このアニメーションは、ユーザーがリスト内で何が変更されたのか、そしてデータの変更時にリストのどこを見ていたのかを把握するのに役立ちます。
Androidで開発するようになってから、「CGI」の各行をアニメーション化する機能は、これと同等なものが見つかりませんでした。
テーブルビュー
. 呼び出し
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の実装やフォークを自作することも頭に浮かびましたが、これはそれほど難しいことではなさそうな気がします。
ありがとうございます。
解決方法は?
Animation anim = AnimationUtils.loadAnimation(
GoTransitApp.this, android.R.anim.slide_out_right
);
anim.setDuration(500);
listView.getChildAt(index).startAnimation(anim );
new Handler().postDelayed(new Runnable() {
public void run() {
FavouritesManager.getInstance().remove(
FavouritesManager.getInstance().getTripManagerAtIndex(index)
);
populateList();
adapter.notifyDataSetChanged();
}
}, anim.getDuration());
上から下へのアニメーションには :
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="20%p" android:toYDelta="-20"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
関連
-
[解決済み] 現在のテーマでスタイル 'coordinatorLayoutStyle' を見つけることができませんでした。
-
[解決済み】Android Studioの初回起動。Android SDKアドオンリストにアクセスできない
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] Gradleのエラーです。イベントディスパッチスレッドからの書き込みアクセスは、Android Studioでのみ許可されます。
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studioでパラメータ化されたユニットテストを実行すると、指定されたインクルードに対するテストが見つからないエラーが発生する
-
[解決済み】AndroidのSSL接続でトラストアンカーが見つからない
-
[解決済み】Android Studio AVD - Emulator: 終了コード 1 でプロセスが終了
-
[解決済み】onCreateOptionsMenu(Menu メニュー)とは何ですか?)
-
[解決済み】ビットマップを保存する場所について
-
[解決済み】Android Studio 3.2 - com.android.tools.build:aapt2:3.2.0-4818971 を見つけられませんでした。
-
[解決済み】getCheckedRadioButtonId()が無駄なintを返す?
-
[解決済み】Couldn't load memtrack module Logcat Error
-
[解決済み] Android Studioで「URIが登録されていません」と報告されるのはなぜですか?[クローズド]
-
[解決済み] com.android.supportのライブラリは全て全く同じバージョン表記である必要があります。