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

3

我是一名新手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代码。paint是一个设置为255的私有double变量。boom_activated是一个布尔变量,在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);
2个回答

0

请参考此主题如何更改位图的不透明度?

另外,我建议将您的Paint实例和paint变量从drawScene中取出并在全局范围内声明,以便您可以重复使用它。每次重新创建它时,这会影响性能。


我正在使用Canvas。下面的代码行是否可以正确地显示我在原始帖子中声明的绘画,而不是我现在使用的内容? canvas.drawBitmap(bitmap, src, dst, paint); - NVtool

0

无法在评论中很好地发布代码 :( 请参考主帖进行编辑 ^ - NVtool
你不需要自己调用drawFrame()方法。只需使视图无效并自动调用onDraw方法即可。你是否在你的视图中重写了onDraw方法? - Abhinav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接