0

我在当前的 Android 应用程序中使用了很多动画 - 我将 AnimationListener 连接到它们,从而控制流程。我还使用一些监听器来进行声音等,也用于流量控制。在其中一些动画/声音中途更改为另一个活动时,其中一些侦听器会导致崩溃,因为侦听器在活动本身结束/被释放后调用代码。是否有强制在某个视图(实际上是 ViewGroup)上的所有动画以删除活动?任何声音对象也是如此(使用 MediaPlayer)。至于 ViewGroup,这必须在所有包含的视图上递归完成。或者有另一种更简单的方法吗?

到目前为止,这是我的递归函数。我在去另一个活动之前调用它。我在 Activity 的顶级 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