AnimationDrawable自动启动

时间:2013-07-25 12:47:40

标签: android animation imageview visibility

我遇到的问题是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发生的可见性变化。在我的案例中,解决方案并非微不足道,因为我的情况很复杂,但对于其他情况,它可能更简单。

编辑2:

我回来根据class description将drawable设置为背景,我引用:

  

创建逐帧动画的最简单方法是定义   动画在XML文件中,放在res / drawable /文件夹中,然后设置   它作为View对象的背景。然后,调用start()来运行   动画。

3 个答案:

答案 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