これは質問ではなく、私が遭遇した問題とそれをどのように解決したかを他の人と共有するようなものです.
基本的に、ユーザーのクリックに応じて追加の子を作成する ViewAnimator を作成しようとしていました。
次のビューをアニメーション化した後にクリーンアップするには、
outAnimation.setAnimationListener(listener);
および AnimationListener で
public void onAnimationEnd(Animation animation) {
viewAnimator.removeView(out);
}
さて、上記のアプローチの問題は、onAnimationEnd の直後に NullPointerException がスローされることです。基本的に、これは ViewAnimator がまだアニメーション化されている子ビューを使用して描画していることを意味します。私はそれを削除したので、そこには null があります。私は調査を行いましたが、基本的に、これは既知のバグのようです。参照: onAnimationEnd で Android アニメーションが終了していない
これを解決するために、レイアウトを変更しました。
<ViewAnimator
android:id="@+id/animator"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@+id/container1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</FrameLayout>
<FrameLayout
android:id="@+id/container2"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</FrameLayout>
</ViewAnimator>
と onAnimationEnd を安全に呼び出すことができますcontainer.removeAllViews()
。新しいビューをアニメーション化するには、非表示のコンテナーを選択して
container.addView(newView);
animator.setDisplayedChild(animator.indexOfChild(container));
コメントやアドバイスをいただければ幸いです。