3

「画面サポート API ガイド」(http://developer.android.com/guide/practices/screens_support.html) などのリソースを読みましたが、dpi の仕組みがわかりません。

私はゲームを開発していますが、レイアウトは使用していません (canvas.drawbitmap などの関数を使用して自分ですべて描画します)。しかし、Canvas.Drawbitmap 関数を使用するときは、画像を描画する画面のピクセルを指定する必要があります。

そのため、現在は固定解像度 (1280x800) で作業しており、drawable-nodpi フォルダーを使用して、電話の画面が広いか狭い場合に後でキャンバスを調整しています。これに伴う問題は、解像度がネイティブの解像度 (1280x800) ではない場合、画像がひどく見えることです。

この問題を解決するにはどうすればよいですか? 私は 3 日間読んで読みましたが、すべての説明と例はレイアウト、9 つのパッチなどに関連しています。

4

1 に答える 1

7

使用されているデバイスの密度を取得し、その密度に選択した基本サイズを掛けます (実際に描画するサイズはどれくらいですか?)

例:

float objectToDrawHeight = 50; //Specified in plain pixels
float objectToDrawWidth = 50; //Specified in plain pixels

float density = getResources().getDisplayMetrics().density;
objectToDrawHeight *= density;
objectToDrawWidth *= density;

//Draw your object using the new (scaled) height and width
//If you are worried about how the object will look on different aspect ratio devices
//  you can get the screen dimensions and use that ratio as a multiplier
//  just as you did with density

Display display = ((Activity)context).getWindowManager().getDefaultDisplay();
float screenDimensionX = display.getWidth();
float screenDimensionY = display.getHeight();

密度と、場合によっては画面の寸法を使用すると、何でも描画して正しくスケーリングすることができます。キャンバスを使用するときは、すべてがピクセル単位であり、dpi 変換を行う必要があると想定してください。

于 2012-08-21T23:55:24.633 に答える