【发布时间】:2013-07-25 08:56:04
【问题描述】:
我对我以编程方式创建的 AnimationDrawable 有疑问,我通过 imageView.setBackgroundDrawable 将它分配给 ImageView 后立即开始(我支持 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,我知道触发动画的原因是在分配 AnimationDrawable 后主动发生在 ImageView 上的可见性变化。在我的情况下,解决方案并非微不足道,因为我的情况很复杂,但对其他人来说可能更简单。
编辑 2:
我回到根据class description将drawable设置为背景,我引用:
创建逐帧动画的最简单方法是定义 XML 文件中的动画,放在 res/drawable/ 文件夹中,并设置 它作为 View 对象的 背景。然后,调用 start() 运行 动画。
【问题讨论】:
-
这很可能是因为您使用
setBackgroundDrawable将其分配为背景可绘制对象 - 当您通过视图分配背景可绘制对象时,它调用 setVisible(..) 可以触发动画。 PS:为什么打不通setImageDrawable? -
@Tom 你是对的!它是由于可见性变化而触发的。这没有意义。有什么好的方法可以防止它发生吗? PS:我改成
setImageDrawable
标签: android animation imageview visibility