2012-02-04 16 views
8

Mam urządzenie o rozdzielczości 800x480. Kiedy tworzę GLSurfaceView, otrzymuję wywołanie onSurfaceChanged z 533x320 (najwyraźniej z zastosowaniem 1.5 modyfikatora HDPI) i powierzchnia jest przeskalowana. Więc kiedy rysuję linię o grubości 1 piksela, wygląda naprawdę źle i nie mogę mieć renderowania w trybie pikselowym.Skalowanie widoku OpenGL dla różnych DPI

To, co chcę mieć, to natywna rozdzielczość (800x480).

View jest tworzony w ten sposób (jak w próbkach NDK OpenGL), aktywności za onCreate:

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

nie używam żadnych układów itp

+0

można zakładać jakiś kod, jak układ ten pogląd GLSurface używanej w? Nie mogę wyciągać odpowiedzi z cienkiego powietrza. –

+0

Pewnie, dodam to do pytania. – Mark

Odpowiedz

4

znalazłem rozwiązanie: gdy dodaję

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

do AndroidManifest.xml, mam prawidłowe resolution.To Szczerze mówiąc, Android jest bardzo dziwna platforma dla mnie po kilku latach z iOS ...

Rozwiązanie znaleźć tutaj: MonoDroid apps don't use correct density drawables

+0

No cóż, to jest fragmentacja urządzenia dla androidów w pracy ... W każdym razie, dobre wywołanie pliku manifestu. – Erik

0

Źródłem problemu wydaje się leżeć z poleceniem onSurfaceChanged przechodzącym w dół (prawdopodobnie zmienionej) szerokości i wysokości.

Może nie być nic złego w kodzie budującym widok, ale chcemy się upewnić, że jest skonstruowany w rzeczywistej rozdzielczości urządzenia. Możliwe, że dzwonienie pod numer setLayout (int width, int height) z żądaną szerokością i wysokością może zapewnić lepszy przebieg ...

Oczywiście należy określić rzeczywisty fizyczny rozmiar ekranu, zanim to zrobisz. Najlepszym sposobem uzyskania rzeczywistych fizycznych pikseli jest szerokość i wysokość pikseli od DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html

Jeśli to nie zadziała, być może wypróbowanie kodu na innym urządzeniu może dać prawidłowy wynik. W tym przypadku może to być urządzenie zależne problem ...

+0

Próbowałem, ale zaskakująco DisplayMetrics również wydaje się być błędny. Wyniki dla HTC Desire Z: widthPixels 533 heightPixels 320 xdpi 254.000000 ydpi 254.000000 density 1.500000 densDPI 240 (urządzenie ma natywną rozdzielczość 800x480) – Mark

+0

Dzięki za pomoc, Erik, DisplayMetrics było dobrą wskazówką! – Mark

Powiązane problemy