我已经分配了onClick方法,它启动了多个动画w / follow结构
private static void aniChain (params)
final ObjectAnimator step1 = RotateObj(params);
final ObjectAnimator step2 = AlphaObj(params);
final ObjectAnimator step3 = ScaleXObj(params);
final ObjectAnimator step4 = ScaleYObj(params);
final ObjectAnimator step5 = ScaleXObj(params);
final ObjectAnimator step6 = ScaleYObj(params);
final ObjectAnimator step7 = AlphaObj(params);
step1.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
isAnimate = true; //another control option
step2.start();
step3.start();
step4.start();
}
});
step2.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
step5.start();
step6.start();
}
});
step6.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
step7.start();
}
});
step7.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
v.setImageDrawable(null);
isAnimate = false; // another control option
}
});
if (!step1.isStarted()) {
step1.start();
}
基本上,链条在第一次点击时工作正常,但在第二次或更多时点击它会发出错误。问题是如何制止它们?
我已经尝试了第二次点击的另一个条件
if (!step1.isStarted()) { //if opener is not started then start it
step1.start();
}
if (step1.isStarted()) { //and if it was started then cancel every
step1-7.cancel(); //animation as they are and proceed to end of last animation
step7.end();
}
然而它仍然是错误的。取消冻结动画在这里类似于暂停,但没有恢复的选项。它永远不会将状态更改为初始状态或任何其他状态,因此我几乎不理解cancel()
的要点。无论如何根据我的逻辑在第二个条件检查我冻结所有动画,无论他们的状态如何,并继续到最后一个动画结束删除图像。
多次点击后,不知怎的多个这些动画往往相互回应,好像它们在方法调用中彼此分开。
也试过
if (!isAnimate) {
step1.start();
} else if (isAnimate) {
step1-7.cancel();
step7.end();
}
不起作用。
还有其他方法可以检查isRunning()并停止这些动画吗?
添加了这个
if (!isAnimate) {
step1.start();
Log.i("boolean","sun "+ isAnimate);
} else {
isAnimate = false;
Log.i("boolean","sun "+ isAnimate);
}
while (step1.isStarted() && isAnimate) {
step1-2.cancel();
step7.end();
}
但在那种情况下,动画永远不会开始。添加到if
s会使其在布尔值更改为true时跳到最后一步,但在第二次单击时不会跳到最后一步。我猜我需要某种倾听者而不是循环。
答案 0 :(得分:0)
每当您调用aniChain()来启动动画时,动画的每个对象(即步骤1,步骤2 ....)都会一次又一次地创建。尝试将它们设为全局或至少应该实例化一次,这样您就可以处理相同的动画对象。对于结束动画,step1.end是停止指定对象动画的正确方法。
答案 1 :(得分:0)
添加"假" obj animator,总持续时间为0开始随机道具的停止。其他动画师的步骤会覆盖那个道具,而假的一个计时器会一直持续到最后。
stepFake.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
if (!isAnimate) {
step7.end();
}
}
});