ejemplo dev android viewflipper

ejemplo - android dev viewflipper



Listener para los eventos de volteo de widgets de ViewFlipper (4)

Tengo una implementación de ViewFlipper que necesita ser mejorada. Este ViewFlipper tiene tres vistas de niño. Básicamente, quiero un indicador en el que la vista secundaria está activa actualmente. My ViewFlipper es solo una parte de un diseño complejo que también tiene vistas de lista, etc.

El cambio de vistas también es automático y se realiza en un intervalo específico.

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

¿Saben cómo puedo tener un oyente para ese evento?

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

¡Gracias!


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

addOnLayoutChangeListener to ViewFlipper, y getCurrentView of ViewFlipper, luego se compara con los hijos de ViewFlipper.

recuerde quitarOnLayoutChangeListener cuando la actividad enDestory

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); }



Si aplica animación (fuera o en animación) al cambiar de vista, puede configurar la escucha para una animación y, por ejemplo, actuar al 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, 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); } }

Luego, para usar el ViewFlipper al que llama showNext () o showPrevious en cualquier lugar y puede obtener la vista activa actualmente, llame a getCurrentView (). Esto ayuda a configurar diferentes animaciones para voltear a la izquierda ya la derecha y para obtener fácilmente las vistas de trabajo actuales.