Android:ObjectAnimator持续时间很长

时间:2015-08-18 21:34:44

标签: android objectanimator

我试图通过使用ObjectAnimator来进行搜索栏动画。问题是如果我将ObjectiAnimator的持续时间设置为较大的值,它将在启动之前有一个延迟。这是我的代码:

_replayBar.setMax(FlightLogger.getTimeLength());
_replayBar.setOnSeekBarChangeListener(this);
_timeMax.setText(secondsToTimeFormat(0) + "/" + secondsToTimeFormat(_replayBar.getMax()));

anim=ObjectAnimator.ofInt(_replayBar, "progress", 0, _replayBar.getMax());
anim.setDuration(_replayBar.getMax() * 1000);

其中anim是objectAnimator,_replaybar是搜索栏,FlightLogger.getTimeLenth()以毫秒为单位返回时间。

我所要做的就是让搜索栏更新过程实时到秒。但是如果传递给anim.setDuration的值变得太大(即:2分钟),它将延迟启动几秒钟。如果持续时间变得更大(即:1小时),延迟可能只有几分钟。

我还尝试使用具有类似代码的ValueAnimator,以及onAnimationUpdate侦听器,如下所示:

anim.addUpdateListener(new ObjectAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        if (!anim.isRunning())
            anim.resume();
        animProgress = (Integer) valueAnimator.getAnimatedValue();
        Log.d(TAG, "progress: " + valueAnimator.getAnimatedValue());
        _replayBar.setProgress(animProgress);
    }
});

我在侦听器中记录进程,并为每个进程返回重复值,类似于ValueAnimator duplicate Values when starting

任何人都可以帮助我吗? 非常感谢

1 个答案:

答案 0 :(得分:0)

用CountDownTimer解决了我的问题,感谢pskink的建议。 这是计时器类:

public class BCountDownTimer extends CountDownTimer{

    public BCountDownTimer(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onTick(long l) {
        millisLeft=l;
        int seekBarProgress= _replayBar.getMax()-(int)(l*0.001);
        _replayBar.setProgress(seekBarProgress);
    }

    @Override
    public void onFinish() {
        _replayBar.setProgress(_replayBar.getMax());
        isPlaying = false;
        _playPause.setImageResource(R.drawable.ic_btn_play);
        _timer= new BCountDownTimer(_replayBar.getMax()*1000, 1000);
    }
}

为了暂停和恢复,millisLeft存储剩余的时间。