Android:如何使用ValueAnimator

37

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

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();
}

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

有人可以帮忙吗?


只需应用动画即可。您可以从animation对象中获取值。或者您可以使用ObjectAnimator,该类将自动将动画值应用于给定对象的属性。 - Jago
@Ahmada Beye // 专业提示:调用“va.setInterpolator(new AccelerateDecelerateInterpolator());”可以使动画更加流畅。 - Nathan Bird
2个回答

82

如果你真的、真的真的想使用 ValueAnimator 来动画化 View 的平移,你可以用这种方式来完成(假设你的意思是 translationX)。

请注意,你正在将平移从0像素动画到3像素,所以可能不会看到太大的差异。

fun move(view: TextView) {
  val va = ValueAnimator.ofFloat(0f, 3f)
  va.duration = 3000 //in millis
  va.addUpdateListener { animation -> view.translationX = animation.animatedValue as Float }
  va.repeatCount = 5
  va.start()
}

49
非常感谢,这正是我非常、非常、非常需要的。 - Lionel Messi
2
请问,为什么要强调“really”这个词?这是一种繁琐的方法还是不好的做法?顺便问一下,我是新手。 - Favour Felix Chinemerem
7
@FelixFavour 因为这不是对视图执行翻译动画的最佳方法(我个人更喜欢使用view.animate())。请看一下动画框架团队的这次演讲。链接 - Shaishav

13

ValueAnimator是制作动画的好工具。通常我们有三个步骤:

步骤1 - 通过以下方式创建您的ValueAnimator类

ValueAnimator animator = ValueAnimator.ofFloat(start value, end value);

第二步- 添加一个更新监听器并重写至少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. 
        }
    });

步骤三 -

animator.start();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接