SwipeListViewのようなものを自分で実装しようとしています。そのため、ListView アイテムを操作するときにアニメーション化する必要があります。ListView アイテムを次のようにドラッグするときに、 ViewPropertyAnimator APIを使用してこれを行います。
ListView parent_list_view = ...;
View list_view_item = ...;
int destination = ...;
long animation_time = ...;
list_view_item.animate().translationX(destination).setDuration(animation_time)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
System.out.println("animation ended");
//...
parent_list_view.invalidate(); //TODO: this can't be the solution
}
});
残念ながら、これは期待どおりには機能しません。
親の ListView を無効にする行がなければ、UI に変化は見られませんが、しばらくするとコンソールに「アニメーションが終了しました」という出力が表示されます。次のユーザー インタラクション (画面のタッチなど) で、アイテムは目的の場所に (アニメーションなしで) 直接ジャンプします。親を無効にして、アニメーションの終了後に項目が「独自に」目的地にジャンプするようにする行を導入しました。それにもかかわらず、これは私が望む動作ではありません。
アニメーションの実行中にアイテム自体または親ビューを無効にしていないように思えます。そのため、UI が更新されず、アイテム ビューの古い状態が表示されます。ユーザー操作 (画面に触れるなど) を実行すると、ビューが無効になり、正しく再描画されます。
私は今この問題を調査しましたが、エラーの検索をどこで続ければよいかわかりません。すべてのコードなしでこの問題をデバッグするのは難しいことはわかっています。申し訳ありませんが、関連するセクションを抽出することは、現時点では非常に困難です。それにもかかわらず、この問題に関するすべての提案は高く評価されています。たぶん私はただ愚かなことを忘れていました...