画布没有正确绘制

时间:2018-05-09 10:11:22

标签: java android canvas draw

我有一个GameCanvas类扩展View,我在我的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);

}
}

我的xml:

<RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@id/game_bottombar"
            android:id="@+id/game_canvas_container">

            // (Hiding my ID)
            <com.---.---.---.GameCanvas
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
</RelativeLayout>

画布工作,我在屏幕上看到它,我尝试将背景颜色更改为红色或绿色,它可以工作并填充整个区域。

此外,一行有效:

canvas.drawRect(50,50,100,100, painter);

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

调试器说我的画布大小是:720 x 952

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

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

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);
}

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

0 个答案:

没有答案