2011-06-29 10 views
8

He logrado escribir un reproductor de video limitado capaz de ver un archivo .3gp desde Internet. El video se mostrará centrado a pantalla completa, manteniendo la relación de aspecto del video. Además, las rotaciones no interrumpen el video, que sigue reproduciéndose sin problemas.Evite la corrupción de Android VideoView al girar de nuevo al retrato

Todo parece estar bien, pero ... en mi HTC Legend cuando gira de nuevo a retrato, el video está dañado, y en lugar de mostrar la pantalla completa, se muestra en su tamaño de píxel original. Pero gira de nuevo a obras de paisaje y se muestra perfectamente. ¿Alguna idea de por qué? Lamentablemente, no tengo más hardware para probar esto y me he quedado sin ideas para probar.

Puede obtener el código fuente completo de ejemplo desde https://github.com/gradha/Android-video-stream-rotation. Aquí hay capturas de pantalla de mí abriendo la aplicación, girando al paisaje, tocando la pantalla para mostrar los controles de video, luego girando de nuevo a vertical para ver la corrupción. video started ok in portrait

on landscape the video works fine too

but now going back to portrait always shows corruption

Respuesta

2

En el código fuente en https://github.com/gradha/Android-video-stream-rotation. ha agregado el comentario:

Desde que se especifica en el AndroidManifest.xml que queremos manejar nuestros propios orientación cambios, redimensionar la pantalla en función de ser vertical u paisaje.

A partir del código fuente AndroidManifest.xml

android:configChanges="orientation|screenSize" 

Por lo tanto, si se agrega este atributo al elemento de la actividad en el manifiesto, yo interpretaría que a medida que la actividad se encargará de todos los cambios de orientación? ¿no tú?

De los desarrolladores de Android

Declarar que su actividad maneja un cambio de configuración, edite el elemento de actividad apropiada en el archivo de manifiesto de incluir el androide: configChanges atribuyen ... more

Por lo tanto, usted debe no necesidad de:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

he creado un proyecto de prueba para comprobar si este era el caso:

giratoria de la corriente video Ejemplo: https://github.com/TouchBoarder/RotatingVideoStream

Mi conclusión: no necesitaba a overide la "onConfigurationChanged" en la actividad de muestre el video correctamente tanto en vertical como en horizontal, y el video sigue reproduciéndose en los cambios de rotación.

dude en mejorar y utilizando un código :)

+0

Tu conclusión es incorrecta: si elimino ese método, el video aún muestra corrupción de video. OTOH tu ejemplo funciona en mi dispositivo, entonces el culpable está en otro lugar. Si encuentro tiempo, buscaré otros cambios entre ambos proyectos. –

+0

Marcando su respuesta como correcta para proporcionar el enlace faltante. –

+1

Si su objetivo es android> = 13, tiene que poner android: configChanges = "orientation | screenSize" además de android: configChanges = "orientation" – jonathanrz

0

Resulta que mi caso de prueba entera estaba mal.Hasta el the commit where I blame the easy videoview example on being wrong todo estaba de acuerdo con el libro. Sin embargo, olvidé la línea android:configChanges="orientation", y al agregar esta línea sobre la confirmación mencionada anteriormente, todo funciona sin corrupción de video.

Voy a marcar la respuesta de hsigmond como válida para proporcionar un ejemplo de prueba que pueda comparar y descubrir el verdadero problema. Todo mi trabajo al respecto con controladores de orientación personalizados y una subclase de VideoView fue incorrecta y se basó incorrectamente en la pregunta Android VideoView orientation change with buffered video. No es que que es incorrecto, simplemente lo apliqué incorrectamente (además de otras respuestas también mencionó la falta android:configChanges).

Cuestiones relacionadas