2012-02-04 11 views
8

私は800x480解像度のデバイスを持っています。 GLSurfaceViewを作成すると、533x320(明らかに1.5のHDPIモディファイアが適用されている)のonSurfaceChangedコールが得られ、サーフェスはアップスケールされます。ですから、1ピクセル太い線を描くと、見た目は本当に悪く、ピクセル完全なレンダリングはできません。異なるDPIのOpenGLサーフェスビュースケーリング

私が持っていたいのは、ネイティブ解像度面(800x480)です。

ビューは活動のonCreateで、(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); 

私は任意のレイアウトを使用していないなど

+0

あなたはこのGLSurfaceビューがで使用されているレイアウトのように、いくつかのコードを投稿することができますか?私は薄い空気から答えを引き出すことはできません。 –

+0

もちろん、質問に追加します。 – Mark

答えて

4

私は解決策を見つけた:私はのAndroidManifest.xmlに

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

を追加するとき、私は適切なresolution.Toは正直言ってもらう、Androidは非常にありますiOS版と数年後に私のために奇妙なプラットフォーム...

ソリューションは、ここで見つける:MonoDroid apps don't use correct density drawables

+0

ああ、それは職場であなたのためにアンドロイドデバイスの断片化です...とにかく、マニフェストファイルを呼び出してください。 – Erik

0

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

ビューを構成するコードに何も問題はないかもしれませんが、実際のデバイス解像度で構築されていることを確認します。 おそらくsetLayout (int width, int height)を希望の幅と高さで明示的に呼び出すと、より良い走行距離を得ることができます。

明らかに、実際の物理的な画面サイズを決定する必要があります。実際の物理ピクセルを取得する最も良い方法は、DisplayMetricsのwidthPixelsとheightPixelsです。http://developer.android.com/reference/android/util/DisplayMetrics.html

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

+0

私は試しましたが、驚くほどDisplayMetricsも間違っているようです。 HTC Desire Zの結果:widthPixels 533 heightPixels 320 xdpi 254.000000 ydpi 254.000000密度1.500000 densDPI 240(デバイスはネイティブ解像度800x480) – Mark

+0

Erik、DisplayMetricsは良いヒントでした! – Mark

関連する問題