Android:如何使用ValueAnimator

Ahm*_*eye 23 android android-animation

我想使用以下内容进行翻译动画

public static void move(TextView view){

    ValueAnimator va = ValueAnimator.ofFloat(0f, 3f);
    int mDuration = 3000; //in millis
    va.setDuration(mDuration);
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        public void onAnimationUpdate(ValueAnimator animation) {

        }
    });
    va.setRepeatCount(5);
    va.start();
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使用onAnimationUpdate方法.

有人可以帮忙吗?

Bar*_*ski 51

如果你真的,真的,真的,真的ValueAnimator用于动画翻译View你可以这样做(完成你的例子,假设你的意思translationX; 记住你的动画翻译从0px到3px,所以你可能不会看多少差异):

public static void move(final TextView view){
    ValueAnimator va = ValueAnimator.ofFloat(0f, 3f);
    int mDuration = 3000; //in millis
    va.setDuration(mDuration);
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        public void onAnimationUpdate(ValueAnimator animation) {
            view.setTranslationX((float)animation.getAnimatedValue());
        }
    });
    va.setRepeatCount(5);
    va.start();
}
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你,我真的非常需要** (24认同)
  • @FelixFavour,因为这不是在视图上执行平移动画的最佳方式(我个人更喜欢 view.animate())。看看动画框架团队的[这篇演讲](https://www.youtube.com/watch?v=N_x7SV3I3P0)。 (4认同)
  • 请问,为什么要强调“真实”呢?这是一种麻烦的方法还是不好的做法?顺便说一句,菜鸟问题。 (2认同)

M S*_*i N 5

ValueAnimator 是制作动画的绝佳工具。通常我们有两个步骤:

第 1 步 - 创建您的 ValueAnimator 类

ValueAnimator animator = ValueAnimator.ofFloat(start value, end value);
Run Code Online (Sandbox Code Playgroud)

第 2 步 - 添加一个更新侦听器并至少覆盖 onAnimationUpdate() 函数

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {
            float value = (float) animator.getAnimatedValue();

            //this value should be used to update properties of views.
            //just don't forget to run invalidate function of your views 
              // to redraw them. 
        }
    });
Run Code Online (Sandbox Code Playgroud)