2012-04-23 58 views
2

在我的應用程序中,我創建一個畫布並在其上添加一些位圖。問題在於對象添加了觸摸屏幕的原因。所以在一個屏幕上它們出現在不同的中間,但它們在像素中的位置是不同的。Android - 在不同設備上繪圖

我是說我有平板電腦和智能手機。當我碰到一個物體時,物體會出現在兩個設備(多人)上,但它不在同一個地方,因爲它通過x和y傳遞位置。

如果有人明白我的意思,你能幫助我嗎? 可能它必須有一些常見的計數比例。

回答

2

我猜你遇到的問題是屏幕是不同的分辨率,你傳遞的像素數據。您需要使用dp值,並在發送它們之前將dp轉換爲像素值。在接收設備上,您需要將給定設備上發回的像素值轉換回dp。使用下面的方法進行轉換。

轉換DP至像素:

final float scale = getResources().getDisplayMetrics().density; 
    int pixelValue = (int) (DESIRED_DP_VALUE * scale + 0.5f); 

轉換像素DP:

final float scale = getResources().getDisplayMetrics().density; 
    int dpValue = (int) ((DESIRED_PIXEL_VALUE) - 0.5f/scale); 

到getDisplayMetrics()的調用密度是什麼會給你基於當前比例值。設備。 dp值意味着與密度無關。

+0

我不知道這是否正常工作,在這兩個設備上我得到的規模1.0,所以他們之間沒有什麼不同...... – goodm 2012-04-23 15:29:11

+0

這可能是因爲兩個密度都差不多。 http://developer.android.com/reference/android/util/DisplayMetrics.html#density「這個值並不完全遵循真實的屏幕尺寸」。 – 2015-08-04 17:40:59

0

如何定義度量標準?如果您使用的像素,使用密度獨立的解決方案:

public int GetDipsFromPixel(float pixels) 
{ 
    // Get the screen's density scale 
    final float scale = getResources().getDisplayMetrics().density; 
    // Convert the dps to pixels, based on density scale 
    return (int) (pixels * scale + 0.5f); 
} 

而且在你課堂上使用這樣的:

textView.setHeight(GetDipsFromPixel(50)); 

這種方式的TextView的高度將是兩個相同的dps設備,即使它們的分辨率不同。

相關問題