Android ViewPropertyAnimator no se escala al mismo tiempo

Estoy intentando utilizar el ViewPropertyAnimator para escalar una visión (un ProgressBar indeterminado) cada vez que un botón es presionado.

loadingCircle.animate().scaleY(1.5f).scaleX(1.5f).setDuration(100f); 

Tengo un animatorListener que las escalas vuelven a la normal onAnimationEnd:

 loadingCircle.animate().scaleY(1.0f).scaleX(1.0f).setDuration(100f); 

Nada demasiado complicado. Sin embargo, no parece escalar xyy al mismo tiempo siempre.

Normalmente lo hace bien la primera vez, a veces la segunda vez. Cuando no funciona, sólo anima la última operación de la cadena. Si es scaleX, solo escalará X. Si lo cambio, solo escalará Y.

Documentación para scaleX y scaleY decir:

Las animaciones que ya se ejecuten en la propiedad se cancelarán

Sin embargo, pensé que ViewPropertyAnimator podía ser encadenado, y este comentario se aplica solamente para las nuevas animaciones (en una diversa línea de código). ¿Estoy haciendo algo mal, o he encontrado un error?

Estoy usando Android 4.2.2 en un GalaxyS4. Stock ROM, pero con raíces. Si eso hace una diferencia.

Creo que este es un error. He trabajado alrededor de esto usando ObjectAnimator lugar de ViewPropertyAnimator para obtener el mismo resultado. Así, el suyo parecería algo como:

 ObjectAnimator animX = ObjectAnimator.ofFloat(loadingCircle, "scaleX", 1.0f); ObjectAnimator animY = ObjectAnimator.ofFloat(loadingCircle, "scaleY", 1.0f); AnimatorSet animSetXY = new AnimatorSet(); animSetXY.playTogether(animX, animY); animSetXY.start(); 

Fuente: http://developer.android.com/guide/topics/graphics/prop-animation.html#view-prop-animator

Leyendo a través del código fuente el comportamiento que describe tiene perfecto sentido y es por diseño. Cuando se agrega una animación, se iniciará en el próximo runloop / cuando se puede. A veces usted será capaz de obtener las dos animaciones allí antes de que esto suceda, a veces no.

Si le dices que no inicie la animación de inmediato, entonces tendrás suficiente tiempo para agregar todas tus animaciones. Esto obviamente es un poco un hack.

Probablemente podría probar algo como esto:

 loadingCircle.animate() .setStartDelay(1000) //prevent the animation from starting .scaleY(1.5f) .scaleX(1.5f) .setDuration(100f) .setStartDelay(0) .start(); 
 AnimatorSet set = new AnimatorSet(); set.setInterpolator(new AccelerateInterpolator()); set.setDuration(100l); view.setPivotX(halfWidth); view.setPivotY(helfHeight); set.play(ObjectAnimator.ofFloat(view, View.SCALE_X, 0f, 1f)) .with(ObjectAnimator.ofFloat(hRippleAdd, View.SCALE_Y, 0f, 1f)); set.start(); 
  • EditText no envolverá su texto
  • Cómo iniciar una actividad desde la vista personalizada
  • Lista extensible de Multichild android
  • Acceso a TextView de viewview de groupview desde getChildView () de ExpandableListView
  • Android - stackoverflow Error
  • Actualizar la posición de la vista debajo de otra vista en Android
  • Consiga enfocado View from ViewPager
  • ¿Cómo mostrar la lista desplegable-ver debajo de la vista particular en android?
  • Diferencia entre vista y subvista - Android
  • Androide ProgressDialog: configuración de vista personalizada en lugar de mensaje - ¿este trabajo?
  • ¿Cómo abrir o expandir la barra de estado a través de la intención?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.