动画可绘制对象自动启动



我对以编程方式创建的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后立即启动。

我希望能够根据自己的逻辑控制动画何时开始。

这发生在任何人身上吗?

**

编辑:

**

多亏了汤姆,我知道触发动画的原因是分配AnimationDrawable后主动发生的ImageView的可见性变化。就我而言,解决方案并非微不足道,因为我的情况很复杂,但对于其他人来说,它可能更简单。

编辑2:

我回到根据类描述将可绘制对象设置为背景,我引用:

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

这很可能是因为您将它分配为具有setBackgroundDrawable的背景可绘制对象 - 当您分配背景可绘制对象时,对 super.setVisibility 的一系列调用最终会出现在视图中,并且该setVisible(..)可以触发动画。

解决方案是使用ImageDrawable?

以下是我找到罪魁祸首的方式。

至于为什么会

这样,这可能是一个设计选择,我太无知了,无法解释,尽管我明白为什么 - 它标志着作为背景和图片之间的区别 - 前者在概念上具有更长的寿命,也许。(但这是一个geuss(。

如果要使用设置背景方法,也许可以尝试保持ImageViews不可见,直到您想要显示动画为止。

我知道

这已经有一年多的历史了,但我会分享我的经验。

  • 我发现停止动画的最简单方法是这样做:

    mImageView.setImageDrawable(mAnimationDrawable);
    mAnimationDrawable.stop();
    mAnimationDrawable.selectDrawable(0);
    

仅此而已。

这实质上是在索引 0 处停止可绘制对象上的动画。 但是,这是一种解决方法,但只需要简单的两行额外行。

不幸的是,

上述解决方法都没有解决此处的问题。我的解决方案是使用:

myView.setTranslationX(10000f); // to hide
myView.setTranslationX(0f); // to show

相关内容

  • 没有找到相关文章