如果不可见,Android动画会自行停止吗?

时间:2012-09-19 07:19:35

标签: android android-layout

ImageView something = (ImageView)findViewById(R.id.my_animated_image_view);
something.setVisibility(View.INVISIBLE);
((AnimationDrawable)something.getDrawable()).stop(); // <-- Is this line redundant?

在我的情况下,我有一堆动画,其中只有一个运行/可见,而现在我正在调用所有这些动画的setVisibility()和stop()。如果我不需要自己调用stop(),可能会变得更快?

1 个答案:

答案 0 :(得分:0)

来自AnimationDrawable来源:

@Override
    public boolean setVisible(boolean visible, boolean restart) {
        boolean changed = super.setVisible(visible, restart);
        if (visible) {
            if (changed || restart) {
                setFrame(0, true, true);
            }
        } else {
            unscheduleSelf(this);
        }
        return changed;
    }

因此,如果将setVisible(false,false)应用于AnimationDrawable,则动画将停止。但是当你将它应用到View时却没有。如果你想让动画流畅,那就试试AnimationDrawable.setVisible(false,false),如果你想让你的视图不可见,不要让它看不见,因为那时会发生很多UI的事情。尝试设置Alpha动画,使其透明并设置SetFillAfter(true)。当动画结束呼叫视图到需要的setVisibility(View.Invisible)时。这可能会给你一些FPS。但通常会考虑一下当你动画时UI的内容。避免GC调用并查看失效