我遇到的问题是AnimationDrawable
我以编程方式创建,只要我通过ImageView
将其分配给imageView.setBackgroundDrawable
(我支持API 8)就会启动。
这是我的代码的缩写:
mSequence = new AnimationDrawable();
ImageView imageView = new ImageView(context);
ImageView.setAdjustViewBounds(false);
我的所有资产都保存在本地,因此我将其添加到AnimationDrawable
for(String assetId : mAssets) {
bitmap = loadBitmap(assetId); // returns a bitmap saved earlier
if (bitmap != null) {
mSequence.addFrame(new BitmapDrawable(res, bitmap), mFrameDuration);
}
}
最后我将AnimationDrawable
分配给视图
if (mSequence.getNumberOfFrames() > 0) {
imageView.setBackgroundDrawable(mSequence);
}
在我有机会调用start()
函数之前,动画会在加载ImageView
后立即启动。
我希望能够根据我自己的逻辑控制动画的开始时间。
这是否发生在任何人身上?
**
**
感谢Tom,我知道触发动画的原因是在分配ImageView
后主动发生的AnimationDrawable
发生的可见性变化。在我的案例中,解决方案并非微不足道,因为我的情况很复杂,但对于其他情况,它可能更简单。
我回来根据class description将drawable设置为背景,我引用:
创建逐帧动画的最简单方法是定义 动画在XML文件中,放在res / drawable /文件夹中,然后设置 它作为View对象的背景。然后,调用start()来运行 动画。
答案 0 :(得分:1)
这很可能是因为你将它指定为带有setBackgroundDrawable
的背景可绘制 - 当你指定一个背景可绘制时,对super.setVisibility的一系列调用最终会出现在View中,并且setVisible(..)
可以触发动画。
解决方案是使用ImageDrawable?
Here's我是如何找到罪魁祸首的。
至于为什么会这样,它可能是一个我无法解释的设计选择,虽然我可以理解为什么 - 它标志着作为背景和作为图片之间的区别 - 前者在概念上更长也许是寿命。 (但这是一个geuss)。
如果您想使用设置背景方法,可以尝试让ImageViews
不可见,直到您想要显示动画。
答案 1 :(得分:1)
我知道这已经有一年多了,但我会分享我的经验。
我发现停止动画的最简单方法是:
mImageView.setImageDrawable(mAnimationDrawable);
mAnimationDrawable.stop();
mAnimationDrawable.selectDrawable(0);
那就是它。
这实际上会停止在索引0处的drawable上的动画。但是,这是一种解决方法,但只需要两条额外的线条。
答案 2 :(得分:1)
不幸的是,以上解决方法都没有解决此问题。我的解决方案是使用:
myView.setTranslationX(10000f); // to hide
myView.setTranslationX(0f); // to show