2

我有一个 ImageView 用于显示一些帧动画。这些图像的持续时间都设置为 100。

但是,有时需要隐藏 ImageView。因此动画停止,ImageView 设置为 GONE。

当需要再次显示 ImageView 时,它的可见性设置为 VISIBLE 并开始动画。

但是 - 现在动画真的很快;而不是 100 的持续时间,它看起来像 50。但是当我检查持续时间时它仍然显示 100 - 但它绝对不像它。

隐藏和显示 ImageView 的代码如下:

    //hide the animation
    final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
    if (frameAnim.isRunning() == true)
    {
        frameAnim.stop();
    }

    frameAnim.setVisible(false, false);
    animImgView.setVisibility(View.GONE);




    //show animation
    animImgView.setVisibility(View.VISIBLE);

    final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
    frameAnim.setVisible(true, true);
    frameAnim.start();

可能是什么问题?

4

3 回答 3

3

经过一些实验,我发现最好的方法是简单地实现:

//hide the animation
animImgView.setVisibility(View.GONE);


//show animation
animImgView.setVisibility(View.VISIBLE);

这将保持动画速度。我对动画停止/启动的最初意图是确保 CPU 不会做超出需要的事情。

于 2012-10-17T18:52:11.577 回答
0

为了达到不仅改变可见性,而且在不可见时停止动画的最初目标:

//hide the animation
animImgView.setVisibility(View.GONE);

//stop animation
final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
if (frameAnim.isRunning() == true)
{
    frameAnim.stop();
}

frameAnim.setVisible(false, false);



//start animation
final AnimationDrawable frameAnim = (AnimationDrawable)  animImgView.getBackground();
frameAnim.setVisible(true, true);
frameAnim.start();

//show animation
animImgView.setVisibility(View.VISIBLE);

这里的区别是在 ImageView 不可见/消失时开始和停止动画。出于某种原因,在动画可见时启动和停止动画会导致时间问题。

资料来源:我自己遇到了这个问题并使用这种技术修复了它。

于 2015-03-10T14:43:19.753 回答
0

在 Android 上苦苦挣扎,我找到了下一个解决方案:

不要使用 start() 和 stop() 方法。

使用 setVisible(true, true) 开始动画:

animImgView.setVisibility(View.VISIBLE);
final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
frameAnim.setVisible(true, true);

和 setVisible(false, true ) 停止它(注意粗体true):

final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground();
frameAnim.setVisible(false, true);
animImgView.setVisibility(View.GONE);
于 2015-06-25T16:10:23.340 回答