2012-02-04 10 views
8

Possiedo un dispositivo con risoluzione 800x480. Quando creo GLSurfaceView, ottengo una chiamata onSurfaceChanged con 533x320 (apparentemente con modificatore HDPI 1.5 applicato) e la superficie viene convertita in scala. Quindi, quando disegno una linea di 1 pixel di spessore, sembra davvero pessima, e non posso avere un rendering perfetto per i pixel.Ridimensionamento della vista della superficie OpenGL per diversi DPI

Quello che voglio avere è la superficie di risoluzione nativa (800x480).

View si crea in questo modo (come in campioni NDK OpenGL), in onCreate di attività:

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

Non faccio uso di qualsiasi layout ecc

+0

potete inserire un codice, come il layout questo punto di vista GLSurface viene utilizzato in? Non riesco a tirare le risposte dal nulla. –

+0

Certo, lo aggiungerò alla domanda. – Mark

risposta

4

ho trovato la soluzione: quando aggiungo

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

a AndroidManifest.xml, ottengo una corretta resolution.To essere onesti, Android è molto strana piattaforma per me dopo alcuni anni con iOS ...

soluzione trovata qui: MonoDroid apps don't use correct density drawables

+0

Oh bene, questa è la frammentazione dei dispositivi androide per te al lavoro ... Ad ogni modo, una buona chiamata sul file manifest. – Erik

0

La radice del problema sembra risiedere con il comando onSurfaceChanged che passa la larghezza e l'altezza (presumibilmente alterata).

Potrebbe non esserci nulla di sbagliato nel codice che costruisce la vista, ma vogliamo assicurarci che sia costruito alla risoluzione effettiva del dispositivo. Forse chiamare lo setLayout (int width, int height) in modo esplicito con la larghezza e l'altezza desiderate può farti migliorare il chilometraggio ...

Ovviamente, dovresti determinare la dimensione fisica effettiva dello schermo prima di farlo. E la soluzione migliore per ottenere i pixel fisici effettivi è con widthPixels e heightPixels di DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html

Se ciò non funziona, forse provare il codice su un dispositivo diverso può produrre un risultato corretto. Nel qual caso può essere un problema dipendente dal dispositivo ...

+0

Ho provato, ma sorprendentemente anche DisplayMetrics sembra sbagliarsi. Risultati per HTC Desire Z: widthPixels 533 heightPixels 320 xdpi 254,000000 ydpi 254,000000 densità 1,500000 densDPI 240 (il dispositivo ha risoluzione nativa 800x480) – Mark

+0

Grazie per l'aiuto, Erik, DisplayMetrics era un buon suggerimento! – Mark