1

surfaceholder.callback を拡張する surfaceview クラスを使用する小さなアプリを構築しています。lunarlander の例と同じように実装されています。私の問題は、私が使用する各タイプのエミュレーター (低密度、中密度、または高密度) が、実際には画面の密度や解像度を期待どおりに変更していないように見えることです。私は最近、スタック オーバーフローについてこの質問をしましたが、その関数で何も悪いことをしていないことに気づきました。

高密度エミュレータの画面には、非常にピクセル化された画像が表示されます。中密度エミュレーターの画像は素晴らしく見えます。低密度エミュレーターの画像はぼやけて見えますが、hdpi ほど悪くはありません。

各エミュレーターで mySurfaceHolder.getSurfaceFrame() を実行したところ、次のようになりました。

  • WVGA800 - 480x800 - hdpi - 320 x 508 のサーフェスを生成
  • デフォルト(HVGA) - mdpi - 320 x 455 のサーフェスを生成します
  • QVGA - 240x320 - ldpi - 320 x 402 のサーフェスを生成します

これらのサーフェスはそれぞれ 480x800、320x480、240x320 であるべきではありませんか? 編集: 320x455 は理にかなっていますが、残りはおそらくタイトル バーに表示されます。しかし、ロー/ハイはどうですか?

したがって、私の問題が次のとおりかどうかはわかりません。

  1. エミュレーターのセットアップ方法。– HVGA、QVGA、WVGA800、および WVGA854 を標準設定 (カスタム解像度なし) で使用しています

  2. surfaceview クラスのコードに何か問題があります。サイズを手動で設定していないことに注意してください。このコールバック メソッドから返されるサイズに依存しています。

.

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    thread.setSurfaceSize(width, height);
}

何かご意見は?いつものように、私はあなたのすべての助けに感謝します!

4

2 に答える 2

1
于 2010-10-28T14:42:48.053 に答える
0

Surface に作業領域が表示されませんか? ステータス バーとおそらくアプリケーションのタイトル バーを除く。ピクセルの代わりにディップが発生する可能性があります。

ピクセル = ディップ * (密度 / 160)

于 2010-10-28T13:23:20.807 に答える