かなり悩まされた。
ViewのAnimationとremoveViewを併用した場合に発生する。

対策としては、

(1)removeViewする前にアニメーションを消す
対象ViewのclearAnimation()メソッドを実行してからremoveView()する。

private LinearLayout mLayout;
privateView mView;
...略...
public void removeViewTest() {
    mView.clearAnimation();
    mLayout.removeView(mView);
}

(2)AnimationListener.onAnimationEnd()の処理
onAnimationEnd()の中でremoveView()する場合、Handlerで遅延処理させないとエラーが出る。

private LinearLayout mLayout;
privateView mView;
...略...
public void fadeOutTest() {
    AlphaAnimation animation = new AlphaAnimation(1, 0);
    animation.setDuration(300);
    animation.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationEnd(Animation animation) {
            mView.clearAnimation();
            new Handler().post(new Runnable() {
                @Override
                public void run() {
                    mLayout.removeView(mView);
                }
            });
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationStart(Animation animation) {
        }
    });
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Name *
Email *
Website

*