Kindle Fire cambia la resolución de pantalla en algún momento …

Descargo de responsabilidad : este es un extraño problema que sólo ocurre en un Kindle Fire (hasta ahora).

Tecnologías involucradas: Android SDK, Eclipse, LibGDX .

Tengo una aplicación relativamente simple que funciona con LibGDX . La forma en que LibGDX funciona es tener un hilo OpenGL que llamará Create () (una vez) y Render () tantas veces como sea posible (para que pueda hacer su render …).

Así que cuando se inicializa el dispositivo, se llama al método "Create ()" y cuando se inicializa la superficie de OpenGL (todo esto sucede de forma automática), Render () comienza a llamarse.

Si el contexto de OpenGL se pierde, se destruye, etc. su método Resize (width, height) es llamado por LibGDX.

Hasta aquí. Tan bueno.

Ahora me encontré con un extraño problema con un Kindle Fire donde las cosas parecían unos pocos píxeles o "cortar". El Kindle Fire tiene una "softbar" en la parte inferior de la pantalla (20 píxeles) que no se puede ocultar o omitir, que es "tipo de bien" porque el dispositivo no tiene botones físicos. Se espera que toque este bar suave y conseguir un bar más grande para volver, ir a casa, etc De acuerdo con Amazon, esta barra no se puede quitar. (No está 100% claro, pero nadie ha encontrado una manera -que no está rompiendo las reglas de Amazon). La única aplicación que he visto que elimina es que los reproductores de vídeo de Amazon para los videos transmitidos desde la nube de Amazon sólo . Así como se puede ver, no parece haber una manera de "permanentemente" ocultar esa barra.

Así que si la barra está allí, su estado de pantalla real no es la resolución de hardware 1024×600 (paisaje) sino 1024×580. Así que agregué algunos registros a mis métodos para ver qué estaba pasando, y me sorprendió con esto … (recuerda los métodos create (), render () y resize ()):

12-23 15:17:04.119: I/myapp(19921): SCREEN HEIGHT AT CREATE(): 600 [snip other unrelated log stuff] 12-23 15:17:04.673: I/myapp(19921): SCREEN HEIGHT AT RENDER() LOOP: 600 [snip other unrelated log stuff] 12-23 15:17:04.705: I/myapp(19921): MyApp - Resize() Called. 12-23 15:17:04.705: I/myapp(19921): SCREEN HEIGHT AT RENDER() LOOP: 580 

Así que la pantalla ha sido "redimensionada" por el Kindle Fire, "en algún momento".

¿Alguien ha encontrado algo así?

Esta es una captura de pantalla (nota la barra negra en la parte superior, que no se agrega por mí!). Perdóname por desdibujar la imagen, pero este es el proyecto de un cliente y no puedo "revelar" nada.

Introduzca aquí la descripción de la imagen

La parte divertida comienza cuando a veces , la barra no estará allí y la aplicación se verá como la siguiente (otra vez, sry para el desenfoque). Observe cómo la barra superior no está allí …

Introduzca aquí la descripción de la imagen

Tras un examen más detallado de ambos disparos, se puede decir que el fondo (que debe ser el mismo), no lo es. El kindle está haciendo cosas extrañas.

¿Algunas ideas?

Los activos fueron embalados originalmente como 1024×600 pero hemos cambiado eso (580 ahora) y asumiremos que el viewport ahora es 1024×580 pero me preguntaba si alguien encontró una manera mejor de tratar de este absurdo? 🙂

Nota : tenemos android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen" en el manifiesto. No hace nada.

Gracias por adelantado.

Kindle fuego tiene un comportamiento extraño, una vez que la aplicación de carga parece que "se mueve" la pantalla de 20px hacia arriba (Softbar altura) por lo tanto, su aplicación se ve unos pocos píxeles o cortar. Eso es porque cuando se crea su GLSurfaceView y establecer su procesador que llama dos veces al método onSurfaceChanged .

Primera vez, después de onSurfaceCreated se llama, con un valor de resolución de 1024×600 y una segunda vez después de la primera llamada a onDrawFrame con un valor de 1024×580.

La solución, debe controlar las dos llamadas a onSurfaceChanged y cambiar el tamaño de la ventana gráfica opengl.

  private static boolean appStarted = false; ... private static class Renderer implements GLSurfaceView.Renderer { public void onSurfaceChanged(GL10 gl, int width, int height) { if ( !appStarted ) { //Initialization (Resolution 1024x600) } else { //Second call, screen resolution changed (Resolution 1024x580) //Resize(width,height) } appStarted = true; } public void onDrawFrame(GL10 gl) { //Render() } public void onSurfaceCreated(GL10 gl, EGLConfig config) { //Create() } } 

Intente usar esto:

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

Fuente: https://developer.amazon.com/help/faq.html?ref_=pe_132830_21362890#KindleFire

Corrí a este problema recientemente y me preguntaba si ya había encontrado una solución.

La barra negra aparece porque su aplicación informa que la altura tiene una altura de 580 píxeles. OpenGL tiene un sistema de coordenadas en el que (0,0) está en la esquina inferior izquierda de la pantalla.

Por alguna razón, la barra suave del Kindle no está moviendo el EGLSurface hasta 20 píxeles. Sin embargo Redimensionar reduce el tamaño en 20px, dejando la barra negra. Así que el problema es la ubicación de la EGLSurface. Y parece que a veces, debido al momento, la reubicación sucede después de cambiar el tamaño (haciendo desaparecer la barra negra).

  • (Java LibGDX) ¿Cómo puedo cambiar el tamaño de mis texturas en LibGDX?
  • ¿Cómo mostrar el texto vectorizado usando libgdx?
  • GestureDetector en libgdx
  • ¿Hay algún motor de juego 2D mejor que Libgdx?
  • Múltiples montajes en un cuerpo o múltiples cuerpos?
  • Libgdx Scene2d - Set actor (TextField) de relleno?
  • Libgdx - archivos de activos duplicados en .apk
  • LibGdx Object Pool para muchos objetos de la misma clase padre
  • Eclipse se bloquea con límite de gastos generales de GC superado después de enlazar servicios de Google Play
  • Android: LibGDX 2D consumo de memoria del juego
  • NoOptions no se puede resolver con un tipo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.