1

SurfaceView クラスに基づいて Android 用のゲームを開発しています。現在、さまざまな画面サイズに合わせてビューを最適化しようとして立ち往生しています。

問題 1: res フォルダーに PNG ファイルがあり、Canvas.drawBitmap を使用して描画します。この記事 ( http://developer.android.com/guide/practices/screens_support.html ) を読んだ後、画面が大きい場合、Android はビットマップのサイズを変更すると思いました。残念ながら、タブレットでアプリを起動するときと電話で起動するときに、スケーリング (または変更) を認識しませんでした。それで、それはどのように行われますか?利用可能なスペースを計算し、ソースと宛先の Rectangle を使用してビットマップを描画するための巧妙な戦略を考え出す必要がありますか? キャンバスにビットマップを描画する方法のベスト プラクティスやヒントを誰かが持っているとよいでしょう。ピクセル <-> ディップ変換のトピックは既に読みましたが、アプリでその「ソリューション」を使用する方法がわかりません。だからどんな助けもありがたい...

問題 2: res フォルダーに 3 つの PNG があります。1 つの ldpi、1 つの mdpi、および 1 つの hdpi。Ldpi イメージは 50px*50px、mdpi は 75px*75px、hdpi は 100px*100px です。エミュレータ(800 * 480)にアプリをロードすると、100 * 100 pngが使用されます。Acer Iconia Tab でアプリをロードすると、75*75 の画像が使用されます。hdpiは大画面(=タブ)用で、mdpiまたはldpiはエミュレータ画面用に使用されると思いました。少なくとも、アンドロイドはタブでも hdpi-image を使用すると思っていましたが、驚きました...これについての説明も大歓迎です

申し訳ありませんが、4つの長いテキストです。明確にしようとしています...

cya EffDee

4

2 に答える 2

1

ベスト プラクティスは、画像を mdpi フォルダー (ピクセル アスペクト 1) に入れ、すべての水平寸法で密度を使用することです。例えば:

src.left = offsetX * density; 
src.top = 0; 
src.right = (offsetX + width - 1) * density; 
src.bottom = height - 1;
dst.left = x * density; 
dst.top = y; 
dst.right = (x + width - 1) * density; 
dst.bottom = height - 1;
canvas.drawBitmap(myImageStrip, src, dst, null);

mdpi 密度が 1.0 の場合、ldpi 密度は 0.75、hdpi 密度は 1.5 です。

density = getResources().getDisplayMetrics().density;

別の解決策があります。すべてのフォルダーに同じ画像を入れることができます。システムは適切な値を取得するため、値に密度を掛ける必要はありません。ただし、その場合、同じ画像を 3 つ以上コピーする必要があります。

于 2013-04-04T21:41:48.567 に答える
1

図面の大きさを計算するには、 を使用できますCanvas.getDensity()

画面の DPI 値は、ピクセルの量と画面のサイズによって異なります。タブレットの解像度は確かに高いですが、ほとんどのタブレットはかなり大きいです。これにより、DPI 値が低くなります。詳細については、http://developer.android.com/guide/practices/screens_support.htmlをご覧ください。

于 2011-11-02T16:08:20.710 に答える