2

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

<?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):

设备 1

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

设备 2

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

设备 3

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

4

2 回答 2

3

利用:

//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
于 2015-10-27T04:28:52.563 回答
2

你只是有错误的印象。要比较您的操作方式,您需要标准化输出。抓取所有屏幕截图并将它们缩放到相同的密度和分辨率。然后再比较。

编辑

如果您想显示直径为 1 英寸的圆,尽管您不应该使用硬件,dpin还是使用pt单位。请参阅文档:http: //developer.android.com/guide/topics/resources/more-resources.html#Dimension

于 2012-11-19T11:56:38.593 回答