私は GridView を持っています。そのアダプター内には、getView メソッド内に次のコードがあります。
if(deleteState){
Animation deleteAnimation = AnimationUtils.loadAnimation(ThisApplication.getContext(), R.anim.delete_animation);
holder.root.startAnimation(deleteAnimation);
}else{
holder.root.clearAnimation();
}
R.anim.delete_animation は、アイテムを振る iOS のようなアニメーションです。
<!-- Based on: http://stackoverflow.com/a/9449590/1369016 -->
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromDegrees="-4"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:toDegrees="4" />
これまでのところすべて順調です。リストからアイテムを削除すると問題が発生します。アダプターのリストから項目を削除した後、次のように notifyDataSetChanged() を呼び出します。
public void deletePhotoFromAdapter(final int position){
listOfPhotos.remove(position);
notifyDataSetChanged();
}
これを行うと、アイテムが削除されますが、どういうわけか、削除したアイテムのビューが GridView自体の最初のアイテム ビューの下に表示されます。これは、アニメーションがビューを維持するようなものです (ただし、何らかの方法でそのビューを GridView の最初の項目の下に "トランスポート" します)。私が言いたいことを理解できるように、3 つのスクリーンショットを添付します。
また、ビュー自体を削除する直前にアニメーションを停止しようとしました。すると、また面白いことが起こります。すべてのビューのアニメーションは停止していますが、最初のアイテムの下にあるビューはまだ表示されています (また、まだアニメーション化されています!)。
その景色がどこから来ているのか、私にはわかりません。アイデアはありますか?