我已经分配了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时跳到最后一步,但在第二次单击时不会跳到最后一步。猜猜我需要某种听众而不是循环。
无论何时调用aniChain()来启动动画,动画的每个对象,即步骤1,步骤2 ....都会一次又一次地创建。尝试将它们设为全局或至少应该实例化一次,这样您就可以处理相同的动画对象。对于结束动画,step1.end是停止指定对象动画的正确方法。
添加了“假”obj动画师,其总持续时间为0开始'随机道具的停止。其他动画师的步骤会覆盖那个道具,而假的一个计时器会一直持续到最后。
stepFake.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
if (!isAnimate) {
step7.end();
}
}
});