我已经创建了一个8x8的网格,但我怎么能够居中呢?

问题描述:

RelativeLayout container = (RelativeLayout) findViewById(R.id.sc); 

我已经将我的画布类添加到此容器,但是我的网格位于左上角,即网格下方有大的空间,我想知道如何居中网格。这是我绘制网格的代码。我已经创建了一个8x8的网格,但我怎么能够居中呢?

float testWidth = (getWidth() - 16f)/9f; 
float testHeight = (getHeight() - 16f)/9f; 
for (int i = 0; i < 9; i++) { 
    canvas.drawLine(testWidth* i, 0 , testWidth * i, testWidth* 8, dark); 
    canvas.drawLine(0, testWidth* i, testWidth* 8, testWidth* i, dark); 
} 

我是否在xml文件中使用重力/余量?

+0

你在drawlines中为X和Y使用了testWidth,你没有使用testHeight,我知道它不是一个只对一个观测进行居中的答案,但是对你的Y使用testHeight将使得网格成为整个getHeight( ),尽管网格不会是方形的。 – Dampsquid 2013-02-28 16:30:12

+0

@Dampsquid他肯定希望它是正方形,由他的[最后一个问题]来判断(http://*.com/questions/15138834/how-to-scale-a-square-grid-to-any-phones-dimensions)。 – Geobits 2013-02-28 17:09:22

检查它是否适用于您。

float testWidth = (getWidth() - 16f)/9f; 
    float testHeight = (getHeight() - 16f)/9f; 
    float size = Math.min(testWidth, testHeight); 
    float offsetW = (getWidth() - size*8)/2; 
    float offsetH = (getHeight() - size*8) /2; 

    for (int i = 0; i < 9; i++) { 
     canvas.drawLine(offsetW + size*i, 
         offsetH, 
         offsetW + size*i, 
         offsetH + size*8, 
         dark); 
     canvas.drawLine(offsetW, 
         offsetH + size* i, 
         offsetW + size* 8, 
         offsetH + size* i, 
         dark); 
    } 

该代码未经测试。这个想法是为网格提供水平和垂直偏移。

+0

这工作perefectly.Thank你! – user1953208 2013-02-28 19:31:54

在PARENT视图的XML文件中使用gravity = "center"。在这种情况下,视图中的所有孩子都将居中。