Java 链动画不使用AnimatorSet
我想将视图“闪烁”3倍(缩小和备份,重复3倍)。它可以工作,但不适用于AnimatorSet 这项工作:Java 链动画不使用AnimatorSet,java,android,animatorset,Java,Android,Animatorset,我想将视图“闪烁”3倍(缩小和备份,重复3倍)。它可以工作,但不适用于AnimatorSet 这项工作: ibOffers.animate().scaleX(0.7f).scaleY(0.7f).setDuration(200).withEndAction(new Runnable() { @Override public void run() { ibOffers.animate().scaleX(1.0f).scaleY(1.0f).setDuration(2
ibOffers.animate().scaleX(0.7f).scaleY(0.7f).setDuration(200).withEndAction(new Runnable() {
@Override
public void run() {
ibOffers.animate().scaleX(1.0f).scaleY(1.0f).setDuration(200).withEndAction(new Runnable() {
@Override
public void run() {
ibOffers.animate().scaleX(0.7f).scaleY(0.7f).setDuration(200).withEndAction(new Runnable() {
@Override
public void run() {
ibOffers.animate().scaleX(1.0f).scaleY(1.0f).setDuration(200).withEndAction(new Runnable() {
@Override
public void run() {
ibOffers.animate().scaleX(0.7f).scaleY(0.7f).setDuration(200).withEndAction(new Runnable() {
@Override
public void run() {
ibOffers.animate().scaleX(1.0f).scaleY(1.0f).setDuration(200).withEndAction(new Runnable() {
@Override
public void run() {
}
});
}
});
}
});
}
});
}
});
}
});
但这并不是:
final ObjectAnimator scaleDownAnimation =
ObjectAnimator.ofPropertyValuesHolder(ibOffers,
PropertyValuesHolder.ofFloat(View.SCALE_X,0.7f),
PropertyValuesHolder.ofFloat(View.SCALE_Y,0.7f))
.setDuration(200);
final ObjectAnimator scaleBackAnimation =
ObjectAnimator.ofPropertyValuesHolder(ibOffers,
PropertyValuesHolder.ofFloat(View.SCALE_X,1f),
PropertyValuesHolder.ofFloat(View.SCALE_Y,1f))
.setDuration(200);
AnimatorSet s = new AnimatorSet();
s.playSequentially(scaleDownAnimation,
scaleBackAnimation,
scaleDownAnimation,
scaleBackAnimation,
scaleDownAnimation,
scaleBackAnimation);
我错过了什么?我只想改进第一个代码块,因为它看起来很难看。您没有启动它:
s.start();
此外,您不能重复使用ObjectAnimator
。因此,必须为动画的每个步骤创建三个副本。您可以使用一个小实用程序方法来避免重复那么多代码
您的完整序列将是:
ObjectAnimator getScaleAnimation(View v, float scale, int duration) {
return ObjectAnimator.ofPropertyValuesHolder(v,
PropertyValuesHolder.ofFloat(View.SCALE_X, scale),
PropertyValuesHolder.ofFloat(View.SCALE_Y, scale))
.setDuration(duration);
}
AnimatorSet s = new AnimatorSet();
s.playSequentially(
getScaleAnimation(ibOffers, 0.7f, 250),
getScaleAnimation(ibOffers, 1.2f, 250),
getScaleAnimation(ibOffers, 0.7f, 250),
getScaleAnimation(ibOffers, 1.2f, 250),
getScaleAnimation(ibOffers, 0.7f, 250),
getScaleAnimation(ibOffers, 1.0f, 250));
s.start();
你能试着做一次“眨眼”吗?看看我更新的答案。问题是您不能重用
ObjectAnimator
,因此必须为每个对象创建3个副本(这是我的怀疑,也是我之前评论的原因)。