Canvas不会画画

Canvas won't draw

我不明白,我还有其他自定义视图,我可以在其中绘制 canvas 非常好。但是现在我正在创建的新视图根本不会绘制到 canvas!我在当时和现在所做的事情之间找不到任何明显的区别,毕竟 "canvas.drawLine()" 调用仍然相同。

这是一个示例视图,无论我尝试用它做什么都不会绘制(注意背景是黑色的,所以白色 应该 显示)

public class TestView extends View {

    public TestView(Context context)
    {
        super(context);
    }

    public TestView (Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public void onDraw(Canvas canvas){
        Paint paint = new Paint();
        paint.setColor(0xFFFFFF);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(4);

        canvas.drawLine(0,0, 500, 500, paint);
        canvas.drawCircle(0,0, 40, paint);
        Logy.Print("Drew top:" + getTop() + " left:" + getLeft() + " right:" + getRight() + " bottom:" + getBottom());
    }

}

我看过其他类似的问题,我遇到的这个问题绝对不同于其他问题。我没有拼错 onDraw,调用了 onDraw(我可以通过 Logy 判断,这只是 Debug.log() 的一个更简单的外观)。请在将其标记为其他内容的副本之前考虑这一点。

调用onDraw时视图的尺寸为0,0,800,800(左,上,右,下)。 activity 开始时至少调用一次 onDraw。 canvas.drawRGB() 将用颜色淹没视图。

此视图是 activity 中唯一的视图,当我将另一个 "working" 自定义视图放在它的位置时,绘制效果很好。但是现在我尝试绘制的任何新自定义视图都不要绘制。

您没有覆盖 onDraw 方法。 试试这个

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //your stuff here
}

假设您为视图提供了正确的宽度和高度,那么您的绘图似乎工作正常。然而,您的 activity 背景可能是白色的并且您绘制的线条也是 white/transparent - 造成错觉。

尝试将油漆颜色更改为:

paint.setColor(Color.Red);

您绘制的颜色的 alpha 值为 0(又名透明),颜色为白色。尝试使用 use paint.setColor(0xFFFF3432); 或类似的可能与您的背景形成对比的东西进行绘图 - 看看您是否看到一条红线,您就知道它在起作用。

然后选择你想要的颜色。如果它是白色的,请确保使用 0xFFFFFFFF 而不是 0xFFFFFF

颜色格式:

0xAARRGGBB

其中 A = Alpha/Transparency,R = 红色,G = 绿色,B = 蓝色。