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.
- ¿Cómo puedo hacer una pantalla dinámica de volteo (como la del iPhone) en Android
- Cómo configurar imágenes dymanic para ViewFlipper en android?
- Cómo hacer Visualizer mientras graba audio en android
- ¿Cómo funciona el Viewflipper con el botón de retroceso en Android?
- ¿Por qué mi FFT ofrece una salida de visualizador diferente de Windows Media Player?
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!
- JPEG2000 visor y soporte en Android
- Cómo implementar Flipboard ipad página de animación de giro para ver flipper en android?
- Android ViewFlipper volver a la primera vista
- ViewFlipper no se está volviendo con la vista de lista secundaria
- Cómo comprobar el valor anterior en android de viewflipper
- ¿Cómo obtener el número total de vistas desde ViewFlipper?
- Cómo agregar vistas en ViewFlipper mediante programación
- Android: Animación de ViewFlipper
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 ejecutar wifi peer to peer aplicación en el emulador de Android ..?
- ¿Cómo navegar una página a otra página en android phonegap?