¿Cómo puedo repetir una transición para siempre?
Tengo una transición que se ve así:
<?xml version="1.0" encoding="UTF-8"?> <transition xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/divider"/> <item android:drawable="@drawable/divider_active"/> </transition>
Y Código que se ve así:
- ¿Cómo puedo configurar el valor alfa de una vista completa en el nivel 7 de api (Android 2.1)
- Android elementos compartidos transición pre-21
- Animación de transición de actividad de izquierda a derecha en Android
- Android Google IO 2014: ¿Cómo implementar la transición de la actividad con fragmentos?
- Transición de animación entre actividades mediante FLAG_ACTIVITY_CLEAR_TOP
View divider = v.findViewById(R.id.divider); if (divider != null) { TransitionDrawable transition = (TransitionDrawable) divider.getBackground(); transition.startTransition(2000); }
Mi problema es, no sé cómo repetir esta transición para siempre, para que pueda crear un efecto pulsante.
Editar:
Para dejar las cosas claras: El código se ejecuta al crear una vista (listitem), por lo que los bucles no son una solución.
- Android RecyclerView - animar la elevación del elemento al tocar
- Implementar página curl en android?
- Cómo cambiar todas las transiciones de actividad de una vez en la aplicación de Android?
- OverridePendingTransition en el adaptador gridview
- Android NYTimes Swipe Animation / Gesto
- Desarrollador de Android se traslada a iOS - ¿Qué necesito saber?
- OverridePendingTransition no funciona cuando se utiliza FLAG_ACTIVITY_REORDER_TO_FRONT
- Transición de elementos compartidos de Android entre fragmentos con vista de reciclaje y detalles
Creo que deberías usar AnimationDrawable en lugar de TransitionDrawable: http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
Sé que esta pregunta es antigua, pero me gustaría ayudar a otros usuarios con otra posible solución.
AnimationDrawable
es la forma correcta cuando tienes más de 2 imágenes, pero cuando tienes sólo dos imágenes, también puedes usar TransitionDrawable
, como dijiste. Te mostraré cómo hacerlo.
En la primera vez, voy a utilizar un temporizador en mi onCreate()
.
Timer MyTimerImage = new Timer();
Entonces, crearé una clase MyTimerTask para ejecutar mi propio código.
public class MyTimerTask extends TimerTask { LinearLayout myIDLinearLayout= (LinearLayout) findViewById(R.id.myIDofLinearLayout); TransitionDrawable MyTrans = (TransitionDrawable) myIDLinearLayout.getBackground(); int i = 0; @Override public void run() { runOnUiThread(new Runnable(){ @Override public void run() { i++; if (i%2==0) { // MyTrans.startTransition(myTransitionTimeinms); }else{ MyTrans.reserveTransition(myTransitionTimeinms); } }}); } }
Y finalmente, crearé una variable MyTimerTask para ejecutar mi temporizador. Este código va por debajo de la creación del temporizador ().
MyTimerTask MyTimer = new MyTimerTask(); MyTimerImage.schedule(MyTimer, myDelay, myPeriod);
En este caso, el método schedule tiene 3 parámetros: el primero indica nuestra tarea TimerTask, el segundo es el retraso para ejecutar el TimerTask en ms, y el tercero indica cada periodo que queremos ejecutar el código.
No olvide incluir su archivo TransitionFile.xml en su android:background
.
Espero que pueda ayudar a alguien.
public void repeat(){ new CountDownTimer(2000, 1000){ public void onTick(long millisUntilFinished){ transition.startTransition(2000); } public void onFinish() { transition.resetTransition(); repeat(); } }.start(); }
View divider = v.findViewById(R.id.divider); boolean loop = true; while (loop) { TransitionDrawable transition = (TransitionDrawable) divider.getBackground(); transition.resetTransition(); //I don't really know if this is necessary transition.startTransition(2000); //you'll want to stop SOME time. if (wantToStop){ loop = false } }
Eso puede o no puede funcionar correctamente. Digo eso porque durante la transición de 2 segundos, el bucle while continuará en bucle, startTransition
volvería a llamar de nuevo, y otra vez, y otra vez, y otra vez. Puede utilizar una instrucción condicional para comprobar la hora actual y comprobar si la última hora iniciada es inferior a 2000.
Esto puede no ser el mejor, pero un bucle de tiempo es un buen lugar para comenzar.
Si usted necesita, podría intentar dar un ejemplo mejor del código que maneje el lazo del tiempo mejor, pero usted debe intentarlo primero.
- Grupo de mapas de Google con dirección
- Obtener la posición de ImageView relativa a la pantalla mediante programación