我以编程方式创建的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不可见,直到要显示动画为止。

10-04 22:35