我有一个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();
可能是什么麻烦?
答案 0 :(得分:3)
经过一些实验,我发现最好的方法是简单地实现:
//hide the animation
animImgView.setVisibility(View.GONE);
//show animation
animImgView.setVisibility(View.VISIBLE);
这将保持动画速度。动画停止/启动的最初意图是确保CPU没有超出需要的时间。
答案 1 :(得分: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不可见/消失时,会启动和停止动画。出于某种原因,当动画可见时启动和停止动画会导致计时问题。
来源:我自己遇到了这个问题并使用这种技术修复了它。
答案 2 :(得分: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);