2011-04-05 110 views
1

我想创建一个不确定的动画,只是从一种颜色淡出到另一种颜色(如果您愿意的话,会出现一个脉冲)。我不认为这应该需要使用图像,但尽管我尽了最大的努力,但我不确定如何使用类似AlphaAnimationShape来实现此目的。Android进度条:无图像动画不确定

有人可以请提供一些见解,如何做到这一点?我有一种感觉,我错过了一些非常简单的事情。 (例子总是感激!)

谢谢!

回答

2

这是3.0中的一项简单任务 - 您可以设置ObjectAnimator来更改两个值之间的对象(View,ColorDrawable,任何具有该属性的)的“color”或“backgroundColor”。有关此示例,请参阅ApiDemo动画/ BouncingBalls。

但假设您使用的是3.0之前的API,有几种方法。首先,您可以设置自己的处理程序来为您提供所需的计时事件,然后计算每个点的新颜色。

使用AlphaAnimation可能稍微简单一些(如果不是完全直观的话)。你真正想从动画中获得的是百分比值,而不是淡化任何东西。因此,您不要将动画设置在视图上,而是将其设置为从内部值0到1内部运行,然后在onDraw()方法中获取当前动画值并适当设置当前颜色。

例如,这将建立并启动阿尔法动画一秒运行:

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之间的值),你可以计算出适当的中间颜色值。

上面的代码可能完全不符合你的情况,但你应该能够做类似的事情来得到你想要的。

+0

这似乎有点破解。没有办法附加一个动画或drawable,这样'progressBar.setIndeterminate(true);'会启动动画? – 2011-04-05 17:10:24

+0

我同意 - 这是一个破解。这就是我们在3.0版中编写新动画系统的原因。 3.0之前的动画擅长执行特定的任务。但是如果你想在这些封闭的情况之外制作一些动画,那么你是独立的。使用Handler来提供自己的时序循环(至少不使用一种动画来驱动一个完全不相关的动画)是一件小事,但它更多的是代码/工作。拿你的选择... – 2011-04-05 17:35:31

+0

我想我会做出应有的。我也可以用这个方向去另一个方向,但是你的回答解决了我的问题。公认。 – 2011-04-05 17:54:37