7

Estoy trabajando en una aplicación de procesamiento de video multimedia para Android, y me he encontrado con un pequeño problema. Estoy usando la clase FragmentPagerAdapter con una serie de fragmentos diferentes en el interior para varios pasos de procesamiento de video.Android SurfaceView provoca parpadeo de pantalla

Mi primer Fragment contiene un y un SurfaceView que lo alimenta, junto con varios controles de reproducción. Mi problema ocurre cuando deslizo desde el fragmento 1 (con SurfaceView) al fragmento 2 (vacío en este momento). Si aún no he llamado al start(), no ocurre nada inusual, y puedo deslizar normalmente entre fragmentos. Una vez que llamo al start(), toda la pantalla comienza a parpadear intermitentemente cuando paso al siguiente Fragment, incluso si puse el MediaPlayer en el estado inactivo y no está alimentando cuadros al SurfaceView. Lo único que detiene esto es destruir la superficie junto con la vista contenedora al deslizar al tercero Fragment para que FragmentPagerAdapter destruya Fragment o salir de la aplicación a través del botón de inicio o posterior para que la vista se destruya.

No puedo entender por qué sucede esto, aparte de que quizás el hilo de representación SurfaceView de alguna manera está interfiriendo con el hilo principal de la interfaz de usuario. Nada inusual aparece en LogCat, así que estoy un poco atascado. Estoy ejecutando un Galaxy Nexus con Android 4.1 como mi hardware de prueba.

¡Cualquier ayuda sería apreciada!

JT

ACTUALIZACIÓN: he logrado encontrar una solución por ahora reemplazando el método setPrimaryItem() en el FragmentPagerAdapter llamar a un método que elimina la SurfaceView de la jerarquía (usando removeView() en su recipiente LinearLayout) cuando el reproductor de video Fragment deja de mostrarse, y luego restablece el SurfaceView cuando está activo de nuevo. Todavía hay un pequeño parpadeo cuando esto sucede, desafortunadamente, así que si alguien tiene pensamientos adicionales, ¡estaría agradecido!

+0

marque esta respuesta. su problema es similar a esto: [Enlace] (http://stackoverflow.com/questions/8772862/surfaceview-flashes-black-on-load) – RATHI

Respuesta

4

Desde el Android Developers Blog

este widget [SurfaceView] funciona creando una nueva ventana colocada detrás de la ventana de la aplicación. Luego perfora un agujero a través de la ventana de su aplicación para revelar la nueva ventana.

Como el contenido de SurfaceView no reside en la ventana de la aplicación, no se puede transformar (mover, escalar, rotar) de manera eficiente. Esto dificulta el uso de SurfaceView dentro de ListView o ScrollView.

La solución es utilizar un TextureView si está compilando para 4.0 o superior. Si está interesado en utilizar un TextureView para mostrar el video this thread puede ser útil

+0

Awesome answer .... Pasé mi 1 semana para resolver este problema. .... finalmente eliminó SurfaceView/VideoView y usó TextureView. –

Cuestiones relacionadas