【问题标题】:Canvas won't draw画布不会画
【发布时间】:2016-06-02 06:40:49
【问题描述】:

我不明白,我有其他自定义视图可以完美地绘制到画布上。但是现在我正在创建的新视图根本不会绘制到画布上!我在当时和现在所做的事情之间找不到任何明显的区别,毕竟它仍然是相同的“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(左、上、右、下)。活动开始时至少调用一次 onDraw。 canvas.drawRGB() 将使视图充满颜色。

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

【问题讨论】:

  • textview的高宽是多少,背景是什么颜色
  • 您的颜色的 alpha 值为 0,或完全透明。如果您想要纯白色,请将其更改为0xFFFFFFFF,或者直接使用Color.WHITE

标签: android android-canvas


【解决方案1】:

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

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

颜色格式:

0xAARRGGBB

其中 A = Alpha/透明度,R = 红色,G = 绿色,B = 蓝色。

【讨论】:

  • 啊,是的,它是黑底白字,所以这部分还不错。
【解决方案2】:

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

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

【讨论】:

  • 如果您正在绘制自定义内容,您可以跳过super.onDraw(canvas);。不一定要打电话。
  • 吸引我的是透明度值。您不需要覆盖 onDraw。
【解决方案3】:

假设您为视图提供了正确的宽度和高度,您的绘图似乎工作正常。但是,您的活动背景可能是白色的,而您绘制的线条也是白色/透明的,这可能会导致错觉。

尝试将油漆颜色更改为:

paint.setColor(Color.Red);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2020-12-19
    • 2019-07-14
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多