当我通过AnimationDrawable (我支持API 8)将它分配给一个ImageView时,我用编程方式创建的一个ImageView遇到了一个问题。
这是我代码的缩写:
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:
我回到根据类描述设置可绘制的背景,并引用如下:
创建逐帧动画的最简单方法是在XML文件中定义动画,放在res/drawable/文件夹中,并将其设置为背景为一个视图对象。然后,调用start()来运行动画。
发布于 2013-07-25 13:16:06
这很可能是因为您将它指定为一个可以用setBackgroundDrawable绘制的后台绘图--当您分配一个背景绘图时,对super.setVisibility的一系列调用最终出现在View中,而setVisible(..)可以触发一个动画。
解决方案是使用ImageDrawable?
下面是我是如何找到罪犯的。
至于为什么会这样,这可能是一个我无法解释的设计选择,尽管我能理解为什么--它标志着背景和图片之间的区别--也许前者在概念上有更长的寿命。(但那是一场格乌斯)。
如果您想要使用设置背景的方法,也许试着让您的ImageViews不可见,直到您想要显示动画。
发布于 2014-12-01 17:17:29
我知道这已经一年多了,但我会分享我的经验。
仅此而已。
这实际上停止了在索引0处可绘制的动画。不过,这是一种解决办法,但只需简单地增加两行即可。
发布于 2017-04-20 15:35:55
不幸的是,上述任何一个解决办法都解决了这个问题。我的解决办法是使用:
myView.setTranslationX(10000f); // to hide
myView.setTranslationX(0f); // to showhttps://stackoverflow.com/questions/17858462
复制相似问题