我在ImageView上应用了无限动画来指示我的应用中正在运行的后台线程。当线程结束时,我可以通过使用clearAnimation()来停止动画,但它将ImageView重新捕捉到它的起始位置,我希望当前的动画周期完成(它的设计优雅地结束于它的起始位置)。有没有办法做到这一点?
答案 0 :(得分:7)
注册AnimationListener
,并等到onAnimationRepeat()
清除它。我没有试过这个,但我认为它会起作用。
答案 1 :(得分:5)
只需致电setRepeatCount(0)
,然后聆听onAnimationEnd
。有关详细信息,请参阅here。
答案 2 :(得分:2)
您可以在动画侦听器的onAnimationEnd()方法中设置动画的所需位置。然后,视图将显示在您在那里设置的坐标处,而不是转到初始位置。
animation = new TranslateAnimation(0, -length, 0, 0); //setup here your translation parameters
animation.setInterpolator(new LinearInterpolator());
animation.setDuration(10);
animation.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {
animationRunning = true;
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
animationRunning = false;
// setAnimationPositionAfterPositionChange();
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) runningText.getLayoutParams();
params.leftMargin = currentPosition; //Calculate you current position here
runningText.setLayoutParams(params);
}
});
runningText.setAnimation(animation);
答案 3 :(得分:0)
如果您使用的是animate() 你使用setListener(null)来阻止动画, 适合我。
image.animate()
.translationXBy(-width* 0.5f)
.setDuration(300)
.setStartDelay(6000)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
image.animate().rotationBy(90).setDuration(1000).setStartDelay(1).setListener(null);
}
});