Android ViewPropertyAnimator没有';t同时标度
每次按下按钮时,我都试图使用ViewPropertyAnimator缩放视图(不确定的进度条)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); 没什么太复杂的。然而,它似乎并不总
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();