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 .
- Laggy proyecto vacío a 60FPS
- Cómo ajustar el tamaño de los desplegables de azulejos
- Cambiar el identificador del paquete del juego libGDX
- Android Intent y startActivity en Libgdx (clase Non Activity o AndroidApplication)
- libGDX Excepción en el subproceso "LWJGL Application"
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.
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í …
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.
- El deslizador siempre tiene el ancho predeterminado
- Centre SelectBox texto en libgdx usando scene2d
- Mi anuncio de AdMob no está dibujando pero ¿está ahí? (LibGDX Admob 6.4.1)
- LibGDX crea la textura de base64 PNG ByteArrayInputStream
- La imagen no es un poder de 2?
- ¿Cómo leer el archivo de texto de los números de flotación de manera eficiente con Java + LibGDX?
- La mejor manera de detectar el objeto tocado (moviéndose) de la colección en libgdx
- Juego libgdx se bloquea en algunos dispositivos
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).
- DialogFragment se bloquea Actividad al llamar a startActivity ()
- Mostrar la respuesta cada vez que se pulsa la api en volley