如何在不同的Android设备上绘制相同物理尺寸的圆圈?

时间:2012-11-19 11:49:22

标签: android resolution android-resources screen-size density-independent-pixel

我在资源文件中定义了一个圆半径尺寸,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="circleRadius">15dp</dimen>
</resources>

然后我在自定义视图中绘制圆圈,如下所示:

Resources res = getResources();
float radius = res.getDimension(R.dimen.circleRadius);

...

canvas.drawCircle(randomX, randomY, radius, paint);

我的印象是,这会在任何设备上产生相同物理尺寸的圆圈,因为单位是用dp指定的,但事实并非如此。请参阅下面的屏幕截图。

设备1 (皮肤= WVGA800,密度= 240):

Device 1

设备2 (皮肤= QVGA,密度= 120):

Device 2

设备3 (皮肤= 1024x768,密度= 160):

Device 3

对于每个设备,我在启动时勾选Scale display to real size选项,并使用相同的设置(屏幕尺寸= 3.7英寸,显示器dpi = 105)。这是我出错的地方吗?有什么我不理解的吗?

2 个答案:

答案 0 :(得分:2)

你的印象错了。要比较您的方式,您需要规范化输出。抓取所有屏幕截图并将其缩放到相同的密度和分辨率。然后再比较一下。

修改

如果要显示1英寸直径的圆圈,尽管有硬件,但您不应使用dpinpt单位。请参阅文档:http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

答案 1 :(得分:2)

使用:

//get dots per inch

int dpi = getApplicationContext().getResources().getDisplayMetrics().densityDpi;

//the physical size you want in inches

float x = 0.25f;

//get number of dots for that physical size

final float radius = x*(new Float(dpi));

//now you use radius in drawCircle() method