2012-11-19 128 views
2

我在一个资源文件中定义的圆半径尺寸,像这样:如何在不同的Android设备上绘制相同物理尺寸的圆?

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

(皮肤= 1024×768,密度= 160):

Device 3

对于每个设备,我打勾启动时Scale display to real size选项,和所使用的相同的设置(屏幕尺寸= 3.7中,监视器DPI = 105)。这是我出错的地方吗?有什么我不明白的吗?

回答

2

你刚刚得到错误的印象。要比较你的做法,你需要规范输出。抓住所有的屏幕截图,并将它们缩放到相同的密度和分辨率。然后再比较一下。

编辑

如果你想显示1英寸直径的圆,尽管你不应该使用dpinpt单元的硬件。见文档:http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

+0

那么一个人如何得出同样的物理尺寸的圈中的任何设备上? –

+0

屏幕**尺寸**在物理尺寸和屏幕尺寸方面有所不同。如果你试图用尺子来衡量,你永远不会得到完全一样的东西。你想要完成什么? –

+0

我想在任何设备上绘制一个相同物理尺寸(例如1英寸半径)的圆。与[本示例]类似(http://developer.android.com/guide/practices/screens_support.html#density-independence)。 –

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 
相关问题