0

現在の Android アプリでは多くのアニメーションを使用しています。AnimationListener をそれらにフックして、フローを制御しています。また、サウンド用のリスナーなどもフロー制御用に使用しています。これらのアニメーション/サウンドの途中で別のアクティビティに変更すると、アクティビティ自体が終了/割り当て解除された後にリスナーがコードを呼び出すため、これらのリスナーの一部がクラッシュします。アクティビティを削除するために、特定のビュー (実際には ViewGroup) のすべてのアニメーションを強制する方法はありますか? 同じことが、(MediaPlayer を使用する) サウンド オブジェクトにも当てはまります。ViewGroup に関しては、含まれているすべてのビューに対して再帰的に行う必要があります。または、これを行う別の簡単な方法はありますか?

これまでの私の再帰関数は次のとおりです。別のアクティビティに行く前に呼び出します。アクティビティの最上位の ViewGroup で呼び出します。RelativeLayout、LinearLayout、またはその他のものにすることができます。LEVEL はテスト用であり、重要ではありません。

private void clearAnimationsInViewgroup(ViewGroup viewgroup, final int LEVEL) {
    final int CHILDRENCOUNT = viewgroup.getChildCount();
    Log.d(LOG_TAG, "LVL" + LEVEL + ", clearAnimationsInViewgroup: " + viewgroup + ", having child count: " + CHILDRENCOUNT);
    View view;
    Animation animation;
    for (int i = 0; i < CHILDRENCOUNT; i++) {
        view = viewgroup.getChildAt(i);
        // "View" can be a subclass "ViewGroup"?
        if (view instanceof ViewGroup) {
            ViewGroup childViewgroup = (ViewGroup)view;
            clearAnimationsInViewgroup(childViewgroup, LEVEL + 1);
        }
        animation = view.getAnimation();
        if (animation != null) {
            Log.d(LOG_TAG, "LVL" + LEVEL + " clearing anim listener");
            animation.setAnimationListener(null);
        }
    }
}
4

0 に答える 0