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 = 蓝色。
我不明白,我还有其他自定义视图,我可以在其中绘制 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 = 蓝色。