2012-11-19 101 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 
相關問題