Android ViewPropertyAnimator没有';t同时标度

Android ViewPropertyAnimator没有';t同时标度,android,animation,view,scale,Android,Animation,View,Scale,每次按下按钮时,我都试图使用ViewPropertyAnimator缩放视图(不确定的进度条) loadingCircle.animate().scaleY(1.5f).scaleX(1.5f).setDuration(100f); 我有一个animatorListener,可以在AnimationEnd上缩放回正常值: loadingCircle.animate().scaleY(1.0f).scaleX(1.0f).setDuration(100f); 没什么太复杂的。然而,它似乎并不总

每次按下按钮时,我都试图使用ViewPropertyAnimator缩放视图(不确定的进度条)

loadingCircle.animate().scaleY(1.5f).scaleX(1.5f).setDuration(100f);
我有一个animatorListener,可以在AnimationEnd上缩放回正常值:

loadingCircle.animate().scaleY(1.0f).scaleX(1.0f).setDuration(100f);
没什么太复杂的。然而,它似乎并不总是同时缩放x和y

通常第一次做对了,有时第二次。 当它不工作时,它只对链中的最后一个操作设置动画。如果它是scaleX,它将只缩放X。如果我交换它,它将只缩放Y

scaleX和scaleY的文档说明:

已在属性上运行的动画将被取消

但是,我认为ViewPropertyAnimator可以链接,并且此注释仅适用于新动画(在不同的代码行上)。我是做错了什么,还是发现了一个bug


我正在GalaxyS4上运行Android 4.2.2。股票ROM,但扎根。如果这有区别的话。

我相信这确实是一个bug。我通过使用
ObjectAnimator
而不是
ViewPropertyAnimator
来解决这个问题,以获得相同的结果。所以,你的看起来像:

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();

来源:

通读源代码,您描述的行为完全有道理,而且是精心设计的。添加动画时,它将在下一次运行循环/可能的时候开始。有时,在这种情况发生之前,您可以将两个动画都放在那里,有时则无法

如果您告诉它不要立即启动动画,那么您将有足够的时间添加所有动画。这显然有点像黑客

您可能可以尝试以下方式:

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();