我在资源文件中定义了一个圆半径尺寸,如下所示:
<?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):
设备2 (皮肤= QVGA,密度= 120):
设备3 (皮肤= 1024x768,密度= 160):
对于每个设备,我在启动时勾选Scale display to real size
选项,并使用相同的设置(屏幕尺寸= 3.7英寸,显示器dpi = 105)。这是我出错的地方吗?有什么我不理解的吗?
答案 0 :(得分:2)
你的印象错了。要比较您的方式,您需要规范化输出。抓取所有屏幕截图并将其缩放到相同的密度和分辨率。然后再比较一下。
修改强>
如果要显示1英寸直径的圆圈,尽管有硬件,但您不应使用dp
但in
或pt
单位。请参阅文档: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