Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 画布绘制不正确_Java_Android_Canvas_Draw - Fatal编程技术网

Java 画布绘制不正确

Java 画布绘制不正确,java,android,canvas,draw,Java,Android,Canvas,Draw,我有一个类GameCanvas扩展视图,我在xml布局中使用它: public class GameCanvas extends View { private Canvas canvas; private Paint painter; public GameCanvas(Context ctx, AttributeSet attrs) { super(ctx, attrs); painter = new Paint(); painter.setAntiAlias(t

我有一个类GameCanvas扩展视图,我在xml布局中使用它:

public class GameCanvas extends View {

private Canvas canvas;
private Paint painter;

public GameCanvas(Context ctx, AttributeSet attrs)
{
    super(ctx, attrs);

    painter = new Paint();
    painter.setAntiAlias(true);
    painter.setColor(Color.BLACK);
    painter.setStyle(Paint.Style.STROKE);
    painter.setStrokeWidth(5);
}

@Override protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    this.canvas = canvas;

    // JUST AN EXAMPLE

    int w = 50;

    // This should draw a table, it doesn't work.
    for(int i = 0; i<3; ++i)
    {
        for(int j = 0; j<3; ++j)
        {
            int x = j*w;
            int y = i*w;

            canvas.drawRect(x,y,w,w, painter);

        }
    }

    // This is drawn, this works!
    canvas.drawRect(50,50,100,100, painter);

    // This doesn't work
    canvas.drawRect(300,450,100,100, painter);

}
}
显然,当我在100或150以下的坐标中绘制一个矩形时,它可以工作,但是如果我的矩形的大小为400,它也可以工作,并且矩形填充了所有的空间,所以问题不在于画布的大小

调试器显示我的画布大小为:720 x 952

*******更新-解决方案***************/

我使用的是宽度和高度,而不是右侧和底部:

drawRect( left, top, right, bottom);
其中right and bottom是从矩形末端到画布末端的距离

我不知道为什么会这样,工作起来很不愉快。我不知道画布中是否已经有了一个方法,我没有找到它,所以我自己写了它:

public void DrawRectangle(int x, int y, int w, int h)
{
    canvas.drawRect(x, y, x+w, y+h, painter);
}

我知道它很简单,但我更喜欢使用它。

这行
canvas.drawRect(300450100100,painter)
在我看来很奇怪。这5个参数是:左、上、右、下和绘制。看起来你通过的是
宽度
高度
而不是
右侧
底部
哦,你说得对!我将更新问题并发布我找到的解决方案。
drawRect( left, top, right, bottom);
public void DrawRectangle(int x, int y, int w, int h)
{
    canvas.drawRect(x, y, x+w, y+h, painter);
}