如何在Android中使用Canvas为位图的不透明度设置动画?

时间:2011-03-22 21:12:14

标签: java android canvas

我对Android编程很新。我正在尝试使用Android中的Canvas创建位图图像的动画。我正在使用setAlpha()来操纵位图的不透明度。我的drawFrame()方法包含以下内容:

c = holder.lockCanvas();  
drawScene(c, paint);  
holder.unlockCanvasAndPost(c); 

我的drawScene()包括这一点:

Paint transparencyValue = new Paint();  
transparencyValue.setAlpha(paint);
canvas.drawBitmap(boom.getImage(), logoToBoom.getX(), logoToBoom.getY(),
    transparencyValue);

我想我必须插入一个循环来修改paint从0到255并退回。到目前为止它还没有奏效,但我可能做错了。有人可以推荐一下吗?

编辑:这是我Runnable的代码。 paintprivate double设置为255. boom_activatedboolean,如果true启用onTouchEvent,则成为true。它应保持Runnable,直到setBoomState(false);禁用它( private final Runnable DrawSceneThread = new Runnable() { public void run() { if (boom_activated && paint <= 0) { paint = 0; drawFrame(); setBoomState(false); paint = 255; } else if (boom_activated && paint >= 0) { drawFrame(); paint -= 0.7; } else { drawFrame(); }` )。出于某种原因,它仍然没有以不断增加的不透明度绘制位图。以下代码是否有效,或者我遗漏了什么?

drawScene()

在我scene_handler.postDelayed(DrawSceneThread, 25);我有这句话:
                {{1}}

2 个答案:

答案 0 :(得分:0)

请参阅此主题 How to change a bitmap's opacity?

另外,我建议将您的Paint实例和绘制变量从drawScene中取出并在全局范围内声明它,以便您可以重复使用它。一遍又一遍地重建它会损害性能。

答案 1 :(得分:0)

您需要做的是随着时间的推移设置不透明度值的动画。您需要使用处理程序更新alpha值,然后在onDraw函数中绘制位图。请查看本教程,以便更好地了解通过处理程序更新UI:http://developer.android.com/resources/articles/timed-ui-updates.html