我以编程方式创建的AnimationDrawable
出现问题,该问题会在我通过ImageView
(我支持API 8)将其分配给imageView.setBackgroundDrawable
时立即开始。
这是我的代码的缩写:
mSequence = new AnimationDrawable();
ImageView imageView = new ImageView(context);
ImageView.setAdjustViewBounds(false);
我所有的 Assets 都保存在本地,因此我将它们添加到
AnimationDrawable
中for(String assetId : mAssets) {
bitmap = loadBitmap(assetId); // returns a bitmap saved earlier
if (bitmap != null) {
mSequence.addFrame(new BitmapDrawable(res, bitmap), mFrameDuration);
}
}
最后,我将
AnimationDrawable
分配给 View if (mSequence.getNumberOfFrames() > 0) {
imageView.setBackgroundDrawable(mSequence);
}
现在,在我有机会调用
start()
函数之前,动画将在ImageView
加载后立即开始。我希望能够根据自己的逻辑控制动画的开始时间。
这件事发生在任何人身上吗?
**
编辑:
**
多亏了汤姆(Tom),我知道触发动画的原因是分配给
ImageView
之后主动发生的AnimationDrawable
可见性发生了变化。在我的情况下,解决方案并非微不足道,因为我处在一个复杂的情况下,但对其他人来说可能更简单。编辑2:
我回到根据class description将drawable设置为背景,并引用:
最佳答案
这很可能是因为您使用setBackgroundDrawable
将其分配为背景可绘制对象-当您分配背景可绘制对象时,对super.setVisibility的调用链最终出现在View中,并且setVisible(..)
可以触发动画。
解决的办法是使用ImageDrawable吗?
Here's我是如何找到罪魁祸首的。
至于为什么会这样,这可能是一个我不太懂得解释的设计选择,尽管我可以明白为什么-它指出了背景和图片之间的区别-前者在概念上使用生命周期更长, 也许。 (但这是个坏蛋)。
如果要使用设置背景方法,则可以尝试使ImageViews
不可见,直到要显示动画为止。