我想创建一个不确定的动画,只是从一种颜色淡化到另一种颜色(脉冲,如果你愿意的话)。我不认为这应该要求使用图像,但尽管我付出了最大的努力,但我不确定我是否理解如何使用AlphaAnimation和Shape来完成此任务。
有人可以提供一些有关如何实现这一目标的见解吗?我有一种感觉,我在这里错过了一些相当简单的东西。 (总是赞赏这些例子!)
谢谢!
答案 0 :(得分:2)
这是3.0中的一项简单任务 - 您可以设置一个ObjectAnimator来更改两个值之间的对象(View,ColorDrawable,具有属性)的“color”或“backgroundColor”。有关此示例,请参阅ApiDemo动画/ BouncingBalls。
但假设您使用的是3.0之前的API,则有几种方法。首先,您可以设置自己的处理程序,为您提供所需的计时事件,然后计算每个点的新颜色。
使用AlphaAnimation可能稍微容易一些(如果不是完全直观的话)。你真正想要的动画是百分比值,而不是淡化任何东西。因此,您不要在视图上设置动画,只需将其设置为从0到1的内部运行,然后在onDraw()方法中获取当前的动画值并适当地设置当前颜色。
例如,这将设置并启动alpha动画以运行一秒钟:
Transformation transform = new Transformation();
AlphaAnimation anim = new AlphaAnimation(0f, 1f);
anim.setDuration(1000);
anim.start();
然后在绘图循环中,获取当前的动画值:
long time = getDrawingTime();
anim.getTransformation(time, transform);
float elapsedFraction = transform.getAlpha();
获得elapsedFraction(介于0和1之间的值)后,您可以计算相应的中间颜色值。
上面的代码可能与您的具体情况不符,但您应该能够做类似的事情来获得您想要的东西。