如何在ImageView上停止无限动画,但让它完成当前循环?

时间:2011-04-24 21:34:38

标签: android

我在ImageView上应用了无限动画来指示我的应用中正在运行的后台线程。当线程结束时,我可以通过使用clearAnimation()来停止动画,但它将ImageView重新捕捉到它的起始位置,我希望当前的动画周期完成(它的设计优雅地结束于它的起始位置)。有没有办法做到这一点?

4 个答案:

答案 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);
                }
            });