有没有办法在范围中途使用 ValueAnimator 的起点?

Is there a way to use ValueAnimator with a starting point mid-way within the range?

我有图像,我希望在透明和可见之间的重复循环中为其 alpha 设置动画。使用 ValueAnimator 很容易做到这一点:

  mValueAnimator1 = ValueAnimator.ofFloat(1.0f, 0f);
  mValueAnimator1.setRepeatMode(ValueAnimator.REVERSE);
  mValueAnimator1.setRepeatCount(ValueAnimator.INFINITE);
  mValueAnimator1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float value = ((Number) animation.getAnimatedValue()).floatValue();
        imageView.setAlpha(value);

如果图像的起始 alpha 应该是 1,那很简单,如果图像的起始 alpha 应该是 0,那也很简单。

但在我的例子中,我希望起始 alpha 是 ofFloat() 中指定范围内的某个值,即如果我的起始 alpha 应该是 0.75,那么我希望动画像这样循环:

   0.75, 0.85, 0.95, 1.0, 0.95, 0.75, 0.5, 0.3, 0.1, 0.0, 0.1, 0.2, 0.4, 0.6, 0.8 etc

(值只是代表传达一般想法)。

有没有办法在指定范围(例如 0 - 1)但起点位于该指定范围的中间时使用 ValueAnimator?

您可以使用mValueAnimator1.setCurrentFraction(startingAlpha)设置起点,但是setCurrentFraction()只添加到API 22.

另一种方法可能是使用由两个 ValueAnimator 对象组成的 AnimatorSet,第一个带有 ofFloat(1.0f)(您希望动画首先到达的值),然后是另一个 ValueAnimator 在 1.0 和 0.0 之间无限重复。

你应该使用Animator.setCurrentPlayTime(fraction * repetitionPeriod);与 setCurrentFraction 类似,但适用于 API 11+.