8

解像度が 800x480 のデバイスがあります。GLSurfaceView を作成するonSurfaceChangedと、533x320 (明らかに 1.5 HDPI モディファイヤが適用されている) で呼び出しが行われ、サーフェスがアップスケールされます。そのため、1 ピクセルの太い線を描画すると、非常に見栄えが悪く、ピクセル パーフェクトなレンダリングができません。

私が欲しいのは、ネイティブ解像度のサーフェス (800x480) です。

onCreateビューは、Activity の次の方法で (NDK OpenGL サンプルのように) 作成されます。

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

    view = new MyGLSurfaceView(this);
    setContentView(view);

レイアウト等は一切使用しておりません。

4

2 に答える 2

5

私は解決策を見つけました:私が追加するとき

<uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8"/>

AndroidManifest.xmlに、私は適切な解像度を取得します。正直なところ、AndroidはiOSで数年後の私にとって非常に奇妙なプラットフォームです...

ここにある解決策:MonoDroidアプリは正しい密度のドローアブルを使用していません

于 2012-02-08T15:44:13.453 に答える
0

問題の根本は、(おそらく変更された) 幅と高さを渡す onSurfaceChanged コマンドにあるようです。

ビューを構築するコードに問題はないかもしれませんが、実際のデバイス解像度で構築されるようにしたいと考えています。おそらくsetLayout (int width, int height)、目的の幅と高さで明示的に呼び出すと、マイレージが向上する可能性があります...

明らかに、そうする前に実際の物理的な画面サイズを決定する必要があります。そして、実際の物理ピクセルを取得する最善の策は、 DisplayMetrics の widthPixels と heightPixels を使用することです: http://developer.android.com/reference/android/util/DisplayMetrics.html

それでもうまくいかない場合は、別のデバイスでコードを試すと、正しい結果が得られる可能性があります。その場合、それはデバイスに依存する問題かもしれません...

于 2012-02-07T21:44:10.793 に答える