2

次のように、リソース ファイルで円の半径寸法を定義しました。

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

デバイス 1

デバイス 2 (スキン = QVGA、密度 = 120):

デバイス 2

デバイス 3 (スキン=1024x768、密度=160):

デバイス 3

各デバイスについて、Scale display to real size起動時にオプションにチェックを入れ、同じ設定を使用しました (画面サイズ = 3.7 インチ、モニター dpi = 105)。これは私が間違っているところですか?私が理解していないことがありますか?

4

2 に答える 2

3

使用する:

//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
于 2015-10-27T04:28:52.563 に答える
2

あなたはただ間違った印象を受けました。やり方を比較するには、出力を正規化する必要があります。すべてのスクリーンショットを取得し、同じ密度と解像度にスケーリングします。その後、再度比較します。

編集

直径 1 インチの円を表示したい場合は、ハードウェアに関係dpなくinptユニットを使用する必要はありません。ドキュメントを参照してください: http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

于 2012-11-19T11:56:38.593 に答える