有没有办法在范围中途使用 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+.
我有图像,我希望在透明和可见之间的重复循环中为其 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+.