2011-03-08 16 views
8

en una actividad que he incorporado un widget de vídeo (VideoView o MediaPlayer asociado a un SurfaceView) qué tamaño debe adaptarse cuando se gira la pantalla. Esta actividad se usa como contenido en un TabHost.diseño Recomponer Actividad para reproducir vídeo en pantalla completa cuando la pantalla se gira

Mi enfoque actual

el fin de manejar la rotación de pantalla que he proporcionado dos diseños para el retrato de uno y otro para la orientación horizontal (colocado en ./res/layout y carpetas ./res/layout-land) .

El problema de este enfoque es que se crea una nueva actividad para cada rotación, así que no uso el mismo MediaPlayer (o VideoView) => Comienzo el video desde el principio cada vez que giro la pantalla. Como el video se transmite desde la web, no hay forma de almacenar la posición en el video para buscar esta posición al reiniciar el video en la otra actividad.

Lo que me gustaría hacer

tengo que ser capaz de traducir/escala/ocultar puntos de vista dentro de la actividad cuando se gira la pantalla. La traducción/escalado debe mantener la organización del diseño para tener un diseño adaptado a diferentes tamaños de pantalla.

Desired animation/layout

Mis preguntas

  • Cómo traducir/mover vistas a la posición superior izquierda de la pantalla?
  • ¿Cómo ocultar/traducir la vista fuera de la pantalla para hacer desaparecer una vista?
  • Cómo escalar/cambiar el tamaño ¿Ver para ajustar su tamaño al espacio disponible a su alrededor?

  • Qué interfaz, devolución de llamada necesito para poner en práctica con el fin de ser notificado de la rotación de la pantalla para disparar estas transformaciones?

+1

+1 para un encuadre muy bonito de la pregunta ........ –

Respuesta

9

Finalmente encuentro la buena manera de hacerlo. En la documentación de Android se especifica que cuando necesite manejar modificaciones (orientación, teclado ...) sin volver a crear una nueva actividad, debe hacerlo anulando el método onConfigurationChanged de la clase Activity. Debe especificar las modificaciones que considere oportunas en el archivo de manifiesto de su Actividad.

Puede encontrar más información sobre este here.

En mi caso, mi manifiesta Actividad parece:

<activity android:name=".MyActivity" android:configChanges="orientation"></activity> 

Y dentro de mi MyActivity Actividad he añadido el siguiente método:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     int visibility = View.VISIBLE; 
     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      visibility = View.GONE; 
     } 
     getTabHost().getTabWidget().setVisibility(visibility); 
    } 

con la siguiente distribución por mi Actividad:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" /> 

    </LinearLayout> 

</TabHost> 

De esta manera, cuando oculto/muestro la barra del widget de pestañas, VideoView (que es añadido al contenido del TabHost se redimensiona y cuando está en el paisaje, tengo la pantalla completa para ver la película.

Espero les ayude a algunos de ustedes.

Cuestiones relacionadas