¿Cambiar varias propiedades con ObjectAnimator?

Tengo una animación bastante compleja que necesito codificar y estoy usando un montón de ObjectAnimators como el siguiente:

ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(view, TRANSLATION_X, value).setDuration(BASE_DURATION * 2); ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, TRANSLATION_Y, value).setDuration(BASE_DURATION * 2); 

¿Es posible agrupar las traducciones X e Y en el mismo ObjectAnimator en lugar de crear un montón de ellas y luego agregarlas todas en un AnimatorSet?

¡Gracias!

 PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(TRANSLATION_X, value); PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(TRANSLATION_Y, value); ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY); animator.setDuration(BASE_DURATION * 2); animator.start(); 

http://developer.android.com/guide/topics/graphics/prop-animation.html#views Un ObjectAnimator

Creo que deberías usar un AnimationSet . Prácticamente hace lo que quieres y es la buena manera de hacerlo porque cuando pienso en PropertyValuesHolder no pienso en Keyframes .

Así que sí:

 ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(view, TRANSLATION_X, value); ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(view, TRANSLATION_Y, value); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.playTogether(objectAnimator1, objectAnimator2); animatorSet.setDuration(BASE_DURATION * 2); animatorSet.start(); 

Puede agregar tantos ObjectAnimators como desee.

Si está animando una vista (como su ejemplo sugiere), podría usar un ViewPropertyAnimator:

 view.animate().translationX(value_x).translationY(value_y).setDuration(duration).start(); 

Animación de la vista se podría hacer aún más fácil:

 v.animate().x(valueX).y(valueY).setDuration(500).start(); 

(En este fragmento se ha utilizado ViewPropertyAnimator).

Un enfoque alternativo que he utilizado para agregar varias propiedades a la animación de un objeto es utilizar una combinación de código y XML para definir la animación. Esto se basa en esta documentación

Por ejemplo, en XML puedo configurar AnimatorSets y ObjectAnimators para un solo objeto con valores estáticos, y definir una secuencia secuencial de cambios (res / animator / moveout.xml)

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially"> <set> <objectAnimator android:propertyName="scaleX" android:duration="2000" android:valueTo="0.8" android:interpolator="@android:anim/decelerate_interpolator"/> <objectAnimator android:propertyName="scaleY" android:duration="2000" android:valueTo="0.8" android:interpolator="@android:anim/decelerate_interpolator"/> <objectAnimator android:propertyName="alpha" android:duration="2000" android:valueTo="0" android:interpolator="@android:anim/decelerate_interpolator"/> </set> <set> <objectAnimator android:propertyName="scaleX" android:duration="2000" android:valueTo="1.2" android:interpolator="@android:anim/accelerate_interpolator"/> <objectAnimator android:propertyName="scaleY" android:duration="2000" android:valueTo="1.2" android:interpolator="@android:anim/accelerate_interpolator"/> <objectAnimator android:propertyName="alpha" android:duration="2000" android:valueTo="1" android:interpolator="@android:anim/accelerate_interpolator"/> </set> </set> 

Entonces puedo cargar estos AnimatorSets / ObjectAnimators en tiempo de ejecución y modificar sus valores con valores generados dinámicamente:

  AnimatorSet firstSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.moveout); AnimatorSet secondSet = firstSet.clone(); firstSet.setTarget(button); secondSet.setTarget(anotherButton); // Choreograph the animations // Change the duration of all child elements in the set firstSet.setDuration(1000); secondSet.setDuration(200); // Set start delay so second set plays after the first set secondSet.setStartDelay(2000); AnimatorSet anim = new AnimatorSet(); anim.playTogether(firstSet,secondSet); anim.start(); 
  • La animación de diseño no funciona en la primera ejecución
  • ¿Cómo animar la superposición de una edición de la caja de tabulación en el diseño de Android?
  • Android: animateLayoutChanges = "true", ¿qué puedo hacer si el efecto de fade-out no es deseado?
  • Detectar cuando se realiza ValueAnimator
  • PopupWindow Enter Exit La animación no funciona en Marshmallow (23)
  • La vista desaparece cerca del final de la animación RotationY
  • ¿Por qué animateLayoutChanges mueve la posición de las vistas de hermanos antes de que termine la animación?
  • Imagen animada de fondo
  • Ver animar ir detrás de otro diseño
  • Android explotar la transición no explode GridView
  • Colapsar CardView dentro de RecyclerView al animar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.