2011-03-22 81 views
3

我对Android编程相当陌生。我试图在Android中使用Canvas创建位图图像的动画。我使用setAlpha()来操作位图的不透明度。我drawFrame()方法包括以下位:如何在Android中使用Canvas来设置位图的不透明度?

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,并背下来。到目前为止它没有奏效,但我可能做错了什么。谁能请推荐一些东西?

编辑:这是我的代码Runnablepaintprivate double设置为255. boom_activatedboolean,如果onTouchEvent启用它,它将变为true。它应该保持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);

回答

0

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

+0

无法在评论中很好地发布代码:( 请参阅主文章以进行编辑^ – NVtool 2011-03-23 03:33:29

+0

您不需要自己调用drawFrame(),只需使视图无效,onDraw就会自动调用。是否重写onDraw in你的看法? – Abhinav 2011-03-23 07:43:25

0

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

另外,我建议把你的油漆实例和油漆变出你的drawScene函数的和在全局范围内声明它,以便可以重用它。一遍又一遍地重现它会损害性能。

+0

我正在使用Canvas。下面的行是否正确地显示了我原始文章中声明的油漆,而不是我现在使用的油漆? canvas.drawBitmap(bitmap,src,dst,paint); – NVtool 2011-03-23 04:04:22