Listener para el widget ViewFlipper que mueve eventos

Tengo una implementación de ViewFlipper que necesita ser mejorada. Este ViewFlipper tiene tres vistas secundarias. Básicamente, quiero un indicador sobre qué vista secundaria está activa actualmente. Mi ViewFlipper es sólo una parte de un diseño complejo que también tiene vistas de lista, etc.

La conmutación de vistas también es automática y se realiza en un intervalo especificado.

Desde la referencia SDK de Android, no he visto ningún oyente para cuando el ViewFlipper cambia la vista secundaria.

¿Ustedes saben de una manera que puedo tener un oyente para ese evento?

¿O hay formas alternativas de implementar esta función además de usar ViewFlipper?

¡Gracias!

Si aplica animación (fuera o en animación) al cambiar de vista, puede establecer el oyente en una animación y, por ejemplo, actuar en el final de la animación.

viewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) {} public void onAnimationRepeat(Animation animation) {} public void onAnimationEnd(Animation animation) {} }); 

Si bien esta es una vieja pregunta que encontré un enfoque decente que funciona.

 public class MainLaunch extends Activity { ... main setup and code int currentIndex = 0; int maxIndex = 3; // set specific animations for the view flipper on showNext // only showNext while in valid index public void showNext() { if( currentIndex < maxIndex ) { currentIndex++; viewFlipper.setInAnimation(getBaseContext(), R.anim.slide_in_left); viewFlipper.setOutAnimation(getBaseContext(), R.anim.slide_out_right); viewFlipper.showNext(); } } // set specific animations for the view flipper on showPrevious // only showPrevious while in valid index public void showPrevious() { if( currentIndex > 0 ) { currentIndex--; viewFlipper.setInAnimation(getBaseContext(), R.anim.slide_in_right); viewFlipper.setOutAnimation(getBaseContext(), R.anim.slide_out_left); viewFlipper.showPrevious(); } } // get current flipped view public View getCurrentView() { return viewFlipper.getChildAt(currentIndex); } } 

A continuación, para utilizar el ViewFlipper llamar showNext () o showPrevious en cualquier lugar y puede obtener la vista actualmente activa llamando a getCurrentView (). Esto ayuda en el establecimiento de diferentes animaciones para izquierda y derecha flipping y para obtener fácilmente vistas actuales de trabajo.

Encuentro una manera de detectar qué niño está activado:

AddOnLayoutChangeListener a ViewFlipper y getCurrentView de ViewFlipper, luego compare con childs de ViewFlipper.

Recuerde que debe quitarOnLayoutChangeListener cuando activity onDestory

 private View page1, page2, page3, page4; private ViewFlipper viewFlipper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.flipper); page1 = findViewById(R.id.MyFlipper_page01); page2 = findViewById(R.id.MyFlipper_page02); page3 = findViewById(R.id.MyFlipper_page03); page4 = findViewById(R.id.MyFlipper_page04); viewFlipper = (ViewFlipper) findViewById(R.id.MyFlipper_flipper); viewFlipper.addOnLayoutChangeListener(onLayoutChangeListener_viewFlipper); } View.OnLayoutChangeListener onLayoutChangeListener_viewFlipper = new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if(viewFlipper.getCurrentView() == page1) Log.d("test", "change to flipper_page1"); else if(viewFlipper.getCurrentView() == page2) Log.d("test", "change to flipper_page2"); else if(viewFlipper.getCurrentView() == page3) Log.d("test", "change to flipper_page3"); else if(viewFlipper.getCurrentView() == page4) Log.d("test", "change to flipper_page4"); } }; @Override protected void onDestroy() { super.onDestroy(); viewFlipper.removeOnLayoutChangeListener(onLayoutChangeListener_viewFlipper); } 

He creado un ViewFlipper extendido que hace exactamente eso: DecentViewFlipper

  • ¿Cómo puedo mostrar programáticamente el segundo hijo de un ViewFlipper?
  • Android Error código -3 al inicializar Visualizer
  • Android ViewFlipper no se mueve
  • Error en la implementación de Android Visualizer
  • Múltiples vistas con diferentes alturas en ViewFlipper
  • Java.lang.RuntimeException: No se puede inicializar el motor Visualizer, error: -4
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.