2012-02-04 10 views
8

Tengo un dispositivo con resolución de 800x480. Cuando creo GLSurfaceView, recibo una llamada onSurfaceChanged con 533x320 (aparentemente con el modificador 1.5 HDPI aplicado) y la superficie se escala. Así que cuando dibujo una línea de 1 píxel de grosor luce realmente mal, y no puedo tener un renderizado perfecto para píxeles.Escalamiento de vista de superficie OpenGL para diferentes DPI

Lo que quiero es una superficie de resolución nativa (800x480).

vista se crea de esta manera (al igual que en las muestras de OpenGL NDK), en onCreate de Actividad:

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); 

que no utilizan ningún diseños etc.

+0

se puede publicar algo de código, al igual que la disposición de este punto de vista se utiliza en GLSurface? No puedo sacar respuestas del aire. –

+0

Claro, lo agregaré a la pregunta. – Mark

Respuesta

4

he encontrado la solución: cuando agrego

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

a AndroidManifest.xml, consigo resolution.To adecuada ser honesto, Android es muy extraña plataforma para mí después de unos años con iOS ...

solución encontrada aquí: MonoDroid apps don't use correct density drawables

+0

Oh, bueno, esa es la fragmentación de dispositivos androides para ti en el trabajo ... De todos modos, una buena llamada en el archivo de manifiesto. – Erik

0

La raíz del problema parece radicar con el comando onSurfaceChanged pasando por el ancho y la altura (presumiblemente alterados).

Puede que no haya nada de malo en que el código construya la vista, pero queremos asegurarnos de que está construido con la resolución real del dispositivo. Tal vez llamar setLayout (int width, int height) explícitamente con el ancho y la altura deseados puede obtener un mejor millaje ...

Obviamente, antes de hacerlo, debe determinar el tamaño de la pantalla física real. Y su mejor apuesta para obtener los píxeles físicos reales es con widthPixels y heightPixels de DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html

Si eso no funciona, quizás intente con su código en un dispositivo diferente para obtener un resultado correcto. En cuyo caso puede ser una cuestión dependiente del dispositivo ...

+0

Lo he intentado, pero sorprendentemente las DisplayMetrics también parecen estar equivocadas. Resultados para HTC Desire Z: anchoPíxeles 533 alturaPíxeles 320 xdpi 254.000000 ydpi 254.000000 densidad 1.500000 densDPI 240 (el dispositivo tiene resolución nativa 800x480) – Mark

+0

Gracias por su ayuda, Erik, DisplayMetrics fue una buena pista. – Mark

Cuestiones relacionadas