Android Button子类化与自定义背景

时间:2011-09-22 20:57:11

标签: android button background

我一直在解决这个问题并想出如何解决它几天,这是我的问题:

我有一个名为GuiButton的类,它扩展了android.widget.Button。 我重写onDraw方法以绘制我自己的位图作为背景,因为我也有 让android绘制(并在按下之间切换)按钮背景的问题 我想用setBackgroundDrawable()方法的方式。

长话短说,当按钮出现在屏幕上时,整个背景都是黑色背景 按钮的区域,并在其上绘制我自己的按钮图形。这是个问题 因为按钮有一个alpha通道,并且在中间和边缘是透明的,按钮是在按钮的“插槽”的背景上绘制的,所以使用黑色背景自动绘图时,此背景的一部分不是可见,按钮看起来很丑。

这是我的抽奖代码,如果您需要了解其他任何内容,请询问并提供。

@Override
    public void onDraw(Canvas canvas) 
    {
        // Create a new paint
        Paint paint = new Paint();

        // Apply the filter flag for when the bitmap gets 
        // scaled on different screen sizes
        paint.setFlags(Paint.FILTER_BITMAP_FLAG);

        // Clear the canvas
        canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
        if(_pressed)
        {
            canvas.drawBitmap(_pressedBitmap, null, new Rect(0,0,this.getWidth(),this.getHeight()), paint);
        }
        else
        {
            canvas.drawBitmap(_normalBitmap, null, new Rect(0,0,this.getWidth(),this.getHeight()), paint);
        }

        super.onDraw(canvas);
    }

是的,这解决了黑色背景的问题,但它创造了更多:

1:按钮上的文字现在被绘制在位图下方。你好,你看不到它。

2:按钮的背景现在总是我在它上面绘制的第一个“background.png”。 当我按下按钮时,“常规”背景被绘制,并且在“按下状态”背景之上。然而,这看起来很丑,因为它们都包含不同位置的alpha通道。这意味着“正常按钮”仍然可以通过“按下按钮”的透明部分部分可见。

这是一个例子(用丑陋的简化图像来说明问题):

普通按钮: Normal Button

按下按钮: Pressed Button

如您所见,正常(蓝色)按钮始终绘制。我还检查了onDraw方法中的If Else语句,但是如果按下按钮,它永远不会到达“普通”按钮的绘图代码。所以出于某种原因,按钮仍然在内存中或者是什么:S。

1 个答案:

答案 0 :(得分:1)

您需要先致电super.onDraw(canvas),而不是最后一次。