gpt4 book ai didi

java - ValueAnimator 让一个元素消失?

转载 作者:行者123 更新时间:2023-11-29 02:41:22 24 4
gpt4 key购买 nike

我正在尝试制作一个动画,其中我有 4 个以不同方式玩杂耍的圆圈。

我正在使用 ValueAnimator 来执行此操作,但是当我第二次重复 AnimatorSet 时,一个元素消失并重新出现......

发生了什么事?有人知道吗?

代码如下:

    objAnimator = ValueAnimator.ofFloat(0, 1);
objAnimator.setDuration(DURATION);
objAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (Float) animation.getAnimatedValue();

elements[2].setTranslationX(lateralDistance * value);
}
});

objAnimatorTwo = ValueAnimator.ofFloat(0, 1);
objAnimatorTwo.setDuration(DURATION);
objAnimatorTwo.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (Float) animation.getAnimatedValue();

elements[1].setTranslationX(lateralDistance * value);
}
});

objAnimatorThree = ValueAnimator.ofFloat(0, 1);
objAnimatorThree.setDuration(DURATION * 2);
objAnimatorThree.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (Float) animation.getAnimatedValue();

elements[3].setTranslationX((-lateralDistance * 2) * value);
elements[3].setTranslationY((float)(-100 * Math.sin(value*Math.PI)));
}
});

animatorSet = new AnimatorSet();
animatorSet.play(objAnimator).with(objAnimatorThree)
.before(objAnimatorTwo);
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
elements[1].layout(elements[1].getLeft() + (int) lateralDistance,
elements[1].getTop(),
elements[1].getRight() + (int) lateralDistance,
elements[1].getBottom());

elements[2].layout(elements[2].getLeft() + (int) lateralDistance,
elements[2].getTop(),
elements[2].getRight() + (int) lateralDistance,
elements[2].getBottom());

elements[3].layout(elements[3].getLeft() + (int)(-lateralDistance * 2),
elements[3].getTop(),
elements[3].getRight() + (int)(-lateralDistance * 2),
elements[3].getBottom());

presetElementArray();
animatorSet.start();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});

这里是方法 presetElementArray()

private void presetElementArray() {
IndicatorElement temp1 = elements[1];
IndicatorElement temp2 = elements[2];
IndicatorElement temp3 = elements[3];

elements[1] = temp3;
elements[2] = temp1;
elements[3] = temp2;
}

我正在使用一个数组元素来管理圆圈,在一个循环完成后,我在 AnimatorSet 的 AnimatorListener 中设置每个元素的位置,之后我交换数组中的元素,所以它们在第二个周期,我重复。

这是结果:animation slowed and colored

最佳答案

尝试不仅改变布局,而且重置元素的翻译。我是说

elements[i].setTranslationX(0) 

onAnimationEnd()

你没有要求这个,但我认为它可能会有帮助......

使您的代码更好(更小)的一些技巧:

  1. 如果您有空方法,请使用 AnimatorListenerAdapter 而不是 Animator.AnimatorListener
  2. ObjectAnimator 的编码速度通常比 ValueAnimator 快。

您可以在 Android API Guide 中找到更多提示.

作为示例,我对您的代码进行了一些重构:https://pastebin.com/Fik5F7vQ

关于java - ValueAnimator 让一个元素消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com