19

Tengo un video que se reproduce en modo vertical. Al final del video, necesito mostrar algunas vistas sobre él. Esto funciona bien hasta ahora.Android: las vistas superpuestas en el último fotograma de un video a pantalla completa no se vuelven a dibujar correctamente al encender y apagar la pantalla

Sin embargo, tengo un problema cuando las vistas que están sobre el último fotograma de un video no se vuelven a dibujar correctamente al volver a la actividad después de apagar la pantalla, volver a encenderla y luego desbloquear la pantalla.

Lo que estoy observando es que cuando la pantalla se vuelve a encender y me desbloqueo. Mi video y las imágenes se renderizan primero fuera del modo de pantalla completa (con la barra de estado todavía visible), luego la pantalla pasará al modo de pantalla completa, cambiando todas las vistas hacia arriba y causando artefactos.

Parece que las vistas se están desplazando fuera de sus límites de vista por la transición a pantalla completa después de que se procesen.

Estoy realmente perplejo sobre cómo evitar que esto suceda.

Here is the sandbox project on github para evitar que esto se convierta en una publicación llena de código.

La configuración básica para el proyecto es la siguiente:

actividad fragmento tiene una vista de vídeo y una vista botón en su diseño. Luego agrega un fragmento en un contenedor contentView. ContentView se atenúa en 1 segundo antes del final de la reproducción de video.

Todo funciona sin problemas y el problema es volver a la aplicación después de encender y apagar la pantalla.

Además, a veces el video simplemente se desconecta por completo, dejando las vistas sobre un fondo negro.

Gracias de antemano por cualquier ayuda que pueda proporcionar.

proper rendering of views over video

Aquí está la artifacting que sucede cuando se enciende la pantalla apagada, de nuevo, y desbloquear. Tenga en cuenta que tuve que tomar una foto. En DDMS, la herramienta de captura de pantalla ve las imágenes correctamente.

artifacted image

Respuesta

3

en lugar de evitar que la pantalla se apague, puede optar por recibir un evento cuando el usuario desbloquea el teclado después de despertar el teléfono.

En este punto, podría ser una buena idea llamar al View.invalidate en ambas vistas, esto debería causar un redibujado. La cadena de dibujo es muy escamosa mientras la pantalla de bloqueo está activada, porque su aplicación es técnicamente visible, justo debajo de la pantalla de bloqueo.

registerReceiver(new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context ctx, Intent intent) { 
      if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)) 

     } 
    }, new IntentFilter(Intent.ACTION_USER_PRESENT)); 
+0

Gracias por la sugerencia de Colin. Voy a intentarlo. –

+0

np! Espero que funcione :) –

+0

Gracias Colin. Esto definitivamente ayudó, todavía no he resuelto cómo solucionarlo, pero tu sugerencia ilustra el problema. El problema es que se llama a OnResume mientras está viendo la pantalla de bloqueo. En la pantalla de bloqueo, la barra de estado es visible y causa un dibujo incorrecto. Recibir el intento de persentimiento del usuario ayudará a corregir el problema. El único problema ahora es que la llamada invalidada en las vistas parecía no tener ningún efecto. Pero esa debería ser la parte fácil. ¡Gracias de nuevo! –

0

Parece que la disposición de superposición fue desplazado por la barra de control.
¿No cree que se vio afectado por el área de controlador (reproducir/pausa/ff/rew + progreso)?

+0

hi JonA. No estoy seguro de lo que quieres decir. No tengo ningún controlador configurado para esta instancia de Media Player.Pero, ¿hay algo más que deba hacer para asegurarme de que la barra del controlador no interfiera? –

0

puede haber una manera de evitar que la pantalla se apague en 1er lugar ya que esto sería bueno para resolver sus problemas de re dibujado, espero que esto ayude.

Cuestiones relacionadas