2011-05-12 14 views
8

Hola chicos cuando giro mi teléfono, mi actividad se reinicia. Tengo una vista de video para reproducir video, giro y el video se reinicia. Ahora he encontrado añadir esto a mi actividad en el manifiesto se fijaEl teléfono giratorio reinicia el video en android

<activity android:name="Vforum" android:configChanges="orientation"></activity> 

El problema ahora es los controles de vídeo no están siendo redibujado hasta que desaparecen y regresan, dejando así bien como controles muy largos que van de horizontal a vertical modo o controles realmente cortos pasando de vertical a horizontal. Una vez que desaparecen y luego toco para que vuelvan, tienen el tamaño correcto. ¿Hay un mejor método para hacer esto?

Respuesta

21

añadir

android:configChanges="orientation"

a su actividad en AndroidManifest.xml.

  • resuelto mi problema no se descargará el vídeo progresivo de nuevo ..

Si su nivel de 13 o más alto API de destino, debe incluir el valor screenSize además del valor orientation como se describe here. Entonces su etiqueta puede verse como

android:configChanges="orientation|screenSize" 
3

Considere recordar la posición del archivo de video en los eventos del ciclo de vida de la actividad. Cuando se crea Activity, puede obtener la posición del video y reproducirlo desde el momento en que se reinició.

En su clase de actividad:

@Override 
protected void onCreate(Bundle bundle){ 
    super.onCreate(bundle); 
    int mPos=bundle.getInt("pos"); // get position, also check if value exists, refer to documentation for more info 
} 

@Override 
protected void onSaveInstanceState (Bundle outState){ 
    outState.putInt("pos", myVideoView.getCurrentPosition()); // save it here 
} 
+0

¿Qué evento del ciclo de vida se llama al girar? Rápidamente busqué en Google y me quedé corto. Veo 'myVideoView.getCurrentPosition()' guardará la hora actual, pero cuando estoy girando y se está restableciendo, también estoy viendo que la descarga progresiva también comienza. ¿Podría dar un ejemplo simple? El código de Sudo incluso me funcionaría, ¡gracias! – Ronnie

+0

Cuando gira el teléfono, la instancia de actividad actual se destruye y se crea una nueva instancia, por lo que puede verificar el objeto del paquete para la posición del video en onCreate(). La posición del video podría guardarse en onSaveInstanceState (Bundle). Consulte http://developer.android.com/reference/android/app/Activity.html –

+0

Lo que estoy viendo es que el video comienza en algún momento en el futuro. Tal vez sea el siguiente fotograma, aproximadamente 1 segundo de duración. Pero la información se pierde. ¿Alguien sabe cómo rotar sin perder ningún video? – Lucy

1

Añadiendo el atributo configChanges a su manifiesta significa que tendrá handle config changes yourself. Reemplazar el método en su actividad:

int lastOrientation = 0; 

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

    // Checks if orientation changed 
    if (lastOrientation != newConfig.orientation) { 
     lastOrientation = newConfig.orientation; 
     // redraw your controls here 
    } 
} 
+0

Ohhh ok gotcha! Solo estoy en mi segunda semana de Java tan desnuda conmigo ... ¿cómo redibujo los controles ahora? Intenté 'mVideoView.refreshDrawableState();' y fallé. No sé qué método los redibuja. – Ronnie

+0

No desea recrear toda la vista ya que esto matará al reproductor de video. Necesita reemplazar solo las partes que necesitan cambiar (controles) y dejar el reproductor intacto.Básicamente usted: localizará el grupo de vista principal (diseño), obtendrá las posiciones de las vistas a reemplazar (índice), las eliminará, inflará las nuevas, las agregará a la misma posición: http://stackoverflow.com/questions/3334048/android- layout-replacing-a-view-with-another-view-on-run-time –

+0

Aunque estoy usando el MediaController estándar. No quiero que cambie el diseño. Son los controles de video integrados que deben volver a dibujarse. Publiqué un video de lo que está sucediendo: http://www.youtube.com/watch?v=FgRythmUo3A – Ronnie

0

ConfigChanges tiene razón, pero funcionó así;

<activity 
     android:configChanges="orientation|screenSize" ... > 

y también en la clase de actividad

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (lastOrientation != newConfig.orientation) { 
     lastOrientation = newConfig.orientation; 
     // redraw your controls here 
    } 
} 
Cuestiones relacionadas