Java 在为android游戏绘制正方形网格时遇到问题

Java 在为android游戏绘制正方形网格时遇到问题,java,android,android-studio,grid,Java,Android,Android Studio,Grid,我想让它在屏幕中央显示为一个7 x 7的正方形网格,但是你可以看到,在我当前的代码中,垂直线的位置正确,而水平线的位置不正确。我相信这是一个简单的解决方案,任何帮助都将不胜感激- public class GameGrid extends View { Paint black = new Paint(); public GameGrid(Context context) { super(context); black.setColor(Col

我想让它在屏幕中央显示为一个7 x 7的正方形网格,但是你可以看到,在我当前的代码中,垂直线的位置正确,而水平线的位置不正确。我相信这是一个简单的解决方案,任何帮助都将不胜感激-

public class GameGrid extends View {

    Paint black = new Paint();

    public GameGrid(Context context) {
        super(context);

        black.setColor(Color.BLACK);
        black.setStrokeWidth(8);
    }

    @Override
    public void onDraw(Canvas canvas) {

        float startX;
        float stopX;
        float startY;
        float stopY;

        int width = canvas.getWidth();
        int height = canvas.getHeight();

        int gridSize = 7;
        int gridSpacing = width / gridSize;

        //Vertical Grid-lines
        for (int i = 0; i < gridSize; i++) {

            startX = width / 2 - height / 2;
            stopX = width / 2 + height / 2;

            startY = i*gridSpacing;
            stopY = i*gridSpacing;

            canvas.drawLine(startX, startY, stopX, stopY, black);

        }

        //Horizontal Grid-lines
        for (int i = 0; i < gridSize; i++) {

            startX = i*gridSpacing;
            stopX = i*gridSpacing;

            startY = height / 2 - width / 2;
            stopY = height / 2 + width / 2;

            canvas.drawLine(startX, startY, stopX, stopY, black);
        }
    }
公共类GameGrid扩展视图{
黑色油漆=新油漆();
公共游戏网格(上下文){
超级(上下文);
黑色。设置颜色(颜色。黑色);
黑色。设定行程宽度(8);
}
@凌驾
公共空白onDraw(画布){
浮动startX;
浮动stopX;
浮星;
浮动采矿法;
int width=canvas.getWidth();
int height=canvas.getHeight();
int gridSize=7;
int gridSpacing=宽度/网格大小;
//垂直网格线
对于(int i=0;i

我想问题是画布不是正方形?高度大于宽度

因此,在垂直网格线中

startX = width / 2 - height / 2;
 startY = height / 2 - width / 2;
给出一个负数,并将起点放在屏幕左侧。看起来不错,但长度错误

对于水平网格线

startX = width / 2 - height / 2;
 startY = height / 2 - width / 2;
是一个正数,从屏幕的一半开始。类似地,
endY
值超出一定量(请注意,水平网格线比垂直网格线长,并且向下偏移)

也许试试

//Horizontal Y vals
startY = 0;
stopY   = height;

缺少偏移(在两个轴上)。为什么不预先计算
xOffset
yOffset
以及基于点
(xOffset,yOffset)
开始绘制

大概是这样的:

@Override
public void onDraw(Canvas canvas) {

    float startX;
    float stopX;
    float startY;
    float stopY;

    int width = canvas.getWidth();
    int height = canvas.getHeight();

    int gridSize = 7;
    int gridSpacing = Math.min(width, height) / gridSize;
    int boardSize = gridSize * gridSpacing;

    int xOffset = (width - boardSize)/2;
    int yOffset = (height - boardSize)/2; 

    //Vertical Grid-lines
    for (int i = 0; i < gridSize; i++) {

        startX = xOffset + i*gridSpacing;
        startY = yOffset;

        stopX = startX;
        stopY = startY + boardSize;

        canvas.drawLine(startX, startY, stopX, stopY, black);

    }

    //Horizontal Grid-lines
    for (int i = 0; i < gridSize; i++) {

        startX = xOffset;
        startY = yOffset + i*gridSpacing;

        stopX = startX + boardSize;
        stopY = startY;

        canvas.drawLine(startX, startY, stopX, stopY, black);
    }
}

谢谢,但是这只是从左上角到屏幕底部创建了一条对角线对不起,我修正了一个输入错误:endY到stopY。对角线还意味着你做了一些其他编辑来更改X值…?无论如何,我会接受并使用@leobelizquierdo的解决方案。它比我的解决方案好得多,并且生成了整个代码更优雅、更高效。您好,谢谢您的回答,我已经尝试在我的项目中实现了您的代码,现在它似乎已经将水平线与垂直线的正确位置对齐,但是只有一小部分是可见的,这表明它们要么是从屏幕左侧边缘绘制的,要么是t它们显示正确,但只有几个像素。对不起,我现在修复了,我在
stopX
中使用了
gridSize
而不是
boardSize
。现在应该可以工作了。非常感谢,现在唯一的问题是它需要沿底部额外的一条水平线来关闭网格,但我确信我可以在美国犹他州