gpt4 book ai didi

android - AnimatorSet 中的暂停按顺序播放

转载 作者:行者123 更新时间:2023-11-29 20:26:21 33 4
gpt4 key购买 nike

我需要将以下动画应用于 imageView:

1. alpha (0 -> 1) and scale (0 -> 1) in 500ms
2. pause for 1000ms
3. alpha (1 -> 0) and scale (1 -> 0) in 500ms

在我看来,这是三个 Animator,可以使用 AnimatorSet 按顺序播放。

我写了这段代码,其中三个 block 已经清楚地分开了:

ObjectAnimator alpha1 = ObjectAnimator.ofFloat(imageView, View.ALPHA, 0f, 1f);
ObjectAnimator scaleX1 = ObjectAnimator.ofFloat(imageView, View.SCALE_X, 0f, 1f);
ObjectAnimator scaleY1 = ObjectAnimator.ofFloat(imageView, View.SCALE_Y, 0f, 1f);
AnimatorSet part1 = new AnimatorSet();
part1.setInterpolator(new OvershootInterpolator());
part1.setDuration(500);
part1.playTogether(alpha1, scaleX1, scaleY1);

ObjectAnimator pause = ObjectAnimator.ofFloat(imageView, View.ALPHA, 1f);
pause.setDuration(1000);

ObjectAnimator alpha0 = ObjectAnimator.ofFloat(imageView, View.ALPHA, 1f, 0f);
ObjectAnimator scaleX0 = ObjectAnimator.ofFloat(imageView, View.SCALE_X, 1f, 0f);
ObjectAnimator scaleY0 = ObjectAnimator.ofFloat(imageView, View.SCALE_Y, 1f, 0f);
AnimatorSet part2 = new AnimatorSet();
part2.setInterpolator(new AccelerateDecelerateInterpolator());
part2.setDuration(500);
part2.playTogether(alpha0, scaleX0, scaleY0);

在我看来,这段代码很清晰,比使用计时器或监听器要好。主要问题是,有没有一种可以在类似情况下使用的“PauseAnimator? (实际上第二个代码块什么都不做,它在 1000 毫秒内将 alpha 从 1 动画化为 1)

最佳答案

setStartDelay() 方法可用于此目的。此外,PropertyValuesHolder 可用于同时为 View 的不同属性设置动画。

以下是高层次的步骤:

  1. 设置 objectAnimator1 以动画方式并行提高 alpha 和放大 x 和 y
  2. 设置 objectAnimator2 以并行降低 alpha 和缩小 x 和 y 的动画,并带有开始延迟
  3. 使用 AnimatorSet 对序列中的 objectAnimator1 和 objectAnimator2 进行动画处理。

这是代码:我这里的 View 是一个名为“mTextView”的 TextView

// objectAnimator1 stuff
PropertyValuesHolder pvhToRaiseAlpha = PropertyValuesHolder.ofFloat("alpha", 0f, 1.0f);
PropertyValuesHolder pvhForxUpscale = PropertyValuesHolder.ofFloat("scaleX", 0f, 1.0f);
PropertyValuesHolder pvhForyUpscale = PropertyValuesHolder.ofFloat("scaleY", 0f, 1.0f);
ObjectAnimator objectAnimator1 = ObjectAnimator.ofPropertyValuesHolder(mTextView, pvhToRaiseAlpha, pvhForxUpscale, pvhForyUpscale);
objectAnimator1.setDuration(500);

// objectAnimator2 stuff
PropertyValuesHolder pvhToLowerAlpha = PropertyValuesHolder.ofFloat("alpha", 1.0f, 0f);
PropertyValuesHolder pvhForxDownscale = PropertyValuesHolder.ofFloat("scaleX", 1.0f, 0f);
PropertyValuesHolder pvhForyDownscale = PropertyValuesHolder.ofFloat("scaleY", 1.0f, 0f);
ObjectAnimator objectAnimator2 = ObjectAnimator.ofPropertyValuesHolder(mTextView, pvhToLowerAlpha, pvhForxDownscale, pvhForyDownscale);
objectAnimator2.setDuration(500);
objectAnimator2.setStartDelay(1000);

// AnimatorSet stuff
AnimatorSet sequenceAnimator = new AnimatorSet();
sequenceAnimator.playSequentially(objectAnimator1, objectAnimator2);
sequenceAnimator.start();

关于android - AnimatorSet 中的暂停按顺序播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32460213/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com