如何在Android中使用Canvas来设置位图的不透明度?
我对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,并背下来。到目前为止它没有奏效,但我可能做错了什么。谁能请推荐一些东西?
编辑:这是我的代码Runnable
。 paint
是private double
设置为255. boom_activated
是boolean
,如果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);
你必须做的是随着时间的推移不透明度值的动画。您需要使用处理程序来更新alpha值,然后在onDraw函数中绘制位图。查看本教程以更好地了解如何通过处理程序更新UI:http://developer.android.com/resources/articles/timed-ui-updates.html
请参阅本主题 How to change a bitmap's opacity?
另外,我建议把你的油漆实例和油漆变出你的drawScene函数的和在全局范围内声明它,以便可以重用它。一遍又一遍地重现它会损害性能。
我正在使用Canvas。下面的行是否正确地显示了我原始文章中声明的油漆,而不是我现在使用的油漆? canvas.drawBitmap(bitmap,src,dst,paint); – NVtool 2011-03-23 04:04:22
无法在评论中很好地发布代码:( 请参阅主文章以进行编辑^ – NVtool 2011-03-23 03:33:29
您不需要自己调用drawFrame(),只需使视图无效,onDraw就会自动调用。是否重写onDraw in你的看法? – Abhinav 2011-03-23 07:43:25