Android - 无法在所有设备上绘制相同尺寸的正方形

时间:2017-04-04 10:14:08

标签: java android

我有一个在android上运行的应用程序,我必须绘制一个网格。我想在所有设备上网格的单元格大小相同,我发现这种方法可以做到这一点:

float scale = getResources().getDisplayMetrics().density;
float SIZE =  DESIRED_DP_VALUE * scale + 0.5f;

DESIRED_DP_VALUE是我为单元格维度设置的值 我已经在两款智能手机和一款平板电脑上试用了这款应用:平板电脑和其中一款智能手机拥有相同尺寸的电池,而另一款智能手机没有。

这是我用来绘制网格的方法:

protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);
    int count=0;

    while(count<=row){
        float coordinate=count*SIZE;
        canvas.drawLine(coordinate,0,coordinate,column*SIZE,whitePaint);
        count++;
    }

    count=0;

    while(count<=column){
        float coordinate=count*SIZE;
        canvas.drawLine(0,coordinate,row*SIZE,coordinate,whitePaint);
        count++;
    } 
}

在每台设备上正确绘制网格。 问题出在哪里?

1 个答案:

答案 0 :(得分:0)

我认为你正在混合一些概念。 像素大小是指每个点数或高度计数的点数。 每个设备都有自己的屏幕尺寸,以英寸为单位,以及能够在宽度和高度上绘制的像素或点的数量。 尺寸和像素之间的关系是密度。 那么,你想做什么? 在屏幕上绘制一个显示相同物理尺寸的正方形或具有相同像素数的正方形? 如果你想根据英寸绘制,那就这样吧。 对于绘制一英寸的正方形,对于密度为每英寸300像素的设备,您需要300像素。 如果设备是每英寸150像素,则必须绘制150像素的正方形。 因此,您需要将大小固定为英寸,而不是所需的DP。