2010-08-12 12 views
5

Estoy tratando de usar ViewFlipper para agregar una animación entre las vistas, como en seguir un tutorial sobre el tema. Sin embargo, simplemente no parece querer funcionar. Cambiará las páginas, pero no obtendré ninguna animación, incluso si agrego un gran retraso a push_left_in.Sin animación con ViewFlipper?

Aquí es mi onCreate:


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     viewFlipper = (ViewFlipper)findViewById(R.id.flipper); 
     viewFlipper.setAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in)); 
     mapView = (MapView)findViewById(R.id.mapView); 
     mapView.setBuiltInZoomControls(true); 
    } 

push_left_in proviene de las muestras de Google. Aquí está la acción del disparador:


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     switch (item.getItemId()) { 
     case R.id.button_map: 
      viewFlipper.setDisplayedChild(0); 
      return true; 
     case R.id.button_conditions_general: 
      viewFlipper.setDisplayedChild(1); 
      return true; 
(etc) 

Y mi diseño:

 

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout android:id="@+id/mainlayout" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       xmlns:android="http://schemas.android.com/apk/res/android"> 

    <ViewFlipper android:id="@+id/flipper" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <view class="com.google.android.maps.MapView" 
      android:id="@+id/mapView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:clickable="true" 
      android:apiKey="MY_API_KEY" 
      /> 

    <TableLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="#ffffff" 
       android:stretchColumns="1" 
       > 
     <TableRow> 
     <TextView android:id="@+id/field1" 
        android:layout_column="1"   
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:textStyle="bold" 
        android:textSize="18px" 
        android:text="@string/field1" 
        > 
     </TextView> 
     <EditText android:text="100" 
        android:id="@+id/field2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 
     </EditText> 
     <TextView android:id="@+id/field3" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:textStyle="bold" 
        android:textSize="18px" 
        android:text="%" 
        > 
     </TextView> 
     </TableRow> 
    </TableLayout> 

    </ViewFlipper> 
</LinearLayout> 

 

Pensamientos?

+0

Nada salta a mí, aunque no he utilizado un MapView en un ViewFlipper antes. FWIW, aquí hay un proyecto de muestra que muestra animaciones con un ViewFlipper, en caso de que ayude: http://github.com/commonsguy/cw-android/tree/master/Fancy/Flipper2/ – CommonsWare

+0

@CommonsWare has eliminado animaciones de ese ejemplo. ¿Cual fue el problema? – ohhorob

+0

@ohhorob: Perdón por eso. Fue solo para simplificar el ejemplo del libro, ya que no trato con animaciones en ningún otro lado en ese libro en particular. – CommonsWare

Respuesta

11

Intente configurar sus animaciones en el archivo xml.

<ViewFlipper android:id="@+id/flipper" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:inAnimation="@anim/push_left_in"> 
+0

Eso funcionó - ¡gracias! Una nota para los demás con ese problema: no pude ver la solución funcionando de inmediato a través del emulador, debido a la baja velocidad de cuadros del emulador, pero un retraso adicional me permitió verlo. Nuevamente, gracias, shwiz! – Karen

0

Es necesario configurar las animaciones de entrada y salida por separado. Puede hacerlo en XML:

<ViewFlipper 
    android:id="@+id/view_flipper" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:inAnimation="@anim/in_from_right" 
    android:outAnimation="@anim/out_to_left"> 

o en el código:

viewFlipper.setInAnimation(getActivity(), R.anim.in_from_right); 
viewFlipper.setOutAnimation(getActivity(), R.anim.out_to_left); 
Cuestiones relacionadas