Animación con animationSet () en android
OK aquí está el problema que tengo un ImageView en mi actividad, aquí es lo que parece en main.xml:
<ImageView android:id="@+id/ic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon" android:layout_gravity="center_horizontal"/>
Quiero que esta imagen se mueva -200 (izquierda) y luego a 100 (derecha) y luego de nuevo a 0 con efecto de rebote.
- AnimationSet setInterpolator () no funciona wen usando nineoldandroids lib
- Animaciones suaves para diseños pesados
- Mover un ImageView a diferentes posiciones de forma animada en Android
- Adaptador de actualización de animación ListView android
- Cómo restablecer AnimationDrawable
He implementado esto con mi código:
as = new AnimationSet(true); as.setFillEnabled(true); as.setInterpolator(new BounceInterpolator()); TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); ta.setDuration(2000); as.addAnimation(ta); AnimationSet sa = new AnimationSet(true); sa.setFillEnabled(true); sa.setInterpolator(new DecelerateInterpolator()); TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); ta2.setDuration(2000); sa.addAnimation(ta2); as.addAnimation(sa);
Puedes ver en el código la transición de X que quiero (-300,100) entonces (100, 0)
Sin embargo, la imagen no se mueve como debería, en lugar de ello sólo se detiene en 100 y luego rebotando …
Hmmm …., ¿saben ustedes qué está mal o qué debo hacer para lograr esto?
- Makecaleupanimation de appwidget
- Problema de AnimationSet en android
- Android: anima el alfa de la única ruta en un lienzo
- CSS3 animación no funciona en Android 4.2
- Mover vídeo ... usar animación de traducción
- Android Gauge Animation Pregunta
- Maneje adecuadamente la animación de DrawerLayout mientras navega a través del fragmento
- Fragmento que reemplaza la edición de animación
Si no me equivoco, estás filmando una secuencia de animaciones.
Curiosamente, una vez que inicie un AnimationSet, todas las animaciones añadidas se ejecutan simultáneamente y no secuencialmente; Por lo tanto, necesitas setStartOffset (offSet largo) para cada animación que sigue a la primera animación.
Tal vez algo como esto funcionará …
as = new AnimationSet(true); as.setFillEnabled(true); as.setInterpolator(new BounceInterpolator()); TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); ta.setDuration(2000); as.addAnimation(ta); TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); ta2.setDuration(2000); ta2.setStartOffset(2000); // allowing 2000 milliseconds for ta to finish as.addAnimation(ta2);
Te sugiero que utilices ObjectAnimator. Es muy fácil implementar su caso. Su animación puede verse así:
ObjectAnimator animator1 = ObjectAnimator.ofFloat(targetView, "translationX", -200f); animator1.setRepeatCount(0); animator1.setDuration(1000); ObjectAnimator animator2 = ObjectAnimator.ofFloat(targetView, "translationX", 100f); animator2.setRepeatCount(0); animator2.setDuration(1000); ObjectAnimator animator3 = ObjectAnimator.ofFloat(targetView, "translationX", 0f); animator3.setRepeatCount(0); animator3.setDuration(1000); //sequencial animation AnimatorSet set = new AnimatorSet(); set.play(animator1).before(animator2); set.play(animator2).before(animator3); set.start();
Si no estás familiarizado con ObjectAnimator, puedes comprobar este tutorial de ejemplo de android:
Ejemplo de animación de Android View
Algo como esto es muy fácil en 3.0 y superior. Aquí hay dos enlaces que he utilizado para lograr algo similar.
http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html
http://developer.android.com/reference/android/animation/AnimatorSet.Builder.html
- El directorio seleccionado no es un alojamiento válido para Android SDK
- Añadir un botón a la parte superior derecha de la barra de acción