2012-04-23 10 views
2

私のアプリでは、キャンバスを作成し、その上にビットマップを追加します。問題は、オブジェクトが画面に触れる理由を追加していることです。したがって、1つの画面では同じものの中央に表示されますが、ピクセル単位の位置は異なります。Android - さまざまなデバイスで描画する

私はタブレットとスマートフォンを持っているということです。私が1つをタッチすると、オブジェクトは両方のデバイス(マルチプレイヤー)に表示されますが、同じ場所には表示されません。これは、xとyの位置を通過するためです。

誰かが私の言うことを理解すれば、私を助けることができますか? おそらくそれは比率を数えることと共通する何かを持っていなければなりません。

答えて

2

私は、画面の解像度が異なり、ピクセルデータを渡しているという問題があると推測しています。 dp値を使用する必要があり、それらを送信する前にdpをピクセル値に変換する必要があります。受信デバイスでは、指定されたデバイスのdpに返されるピクセル値を変換する必要があります。変換には以下の方法を使用してください。

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

をDPにピクセルを変換するには:ピクセルにDPに変換するために

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

getDisplayMetrics()の呼び出し密度はあなたの現在に基づいてスケール値を与えるものです。デバイス。 dp値は密度に依存しないことを意味する。

+0

これが正しく動作しているかどうかわかりませんが、両方のデバイスでスケール1.0になっているので、違いはありません... – goodm

+0

これはほぼ同じ密度のためかもしれません。 http://developer.android.com/reference/android/util/DisplayMetrics.html#density「この値は実際の画面サイズに正確に従わない」 –

0

メトリックをどのように定義しますか? TextViewの高さは、両方で同じDPSになります。この方法で

textView.setHeight(GetDipsFromPixel(50)); 

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); 
} 

そして、あなたのクラスでこのようにそれを使用する:あなたがピクセルを使用している場合は、密度に依存しないソリューションを使用しますたとえその解像度が異なっていても、

関連する問題