动画第一步->ValueAnimator 基本使用

极客学院Animation教程讲解的很详细,点击进入哦

这里为学习的整理和补充O(∩_∩)O

一、 使用ValueAnimator

  1. 初始化ValueAnimator
  • 方式一
//演示从(0,0)到(400,400)的移动
view = findViewById(R.id.view);
//可以传入n个Int类型的数值,这里仅传入两个0、400
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 400);
valueAnimator.setDuration(3000);
//监听3000ms内,从0->400数值的实时变化
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        int curValue = (int) animation.getAnimatedValue();
        //没有layout的调用,view是不会移动的,layout设置view的位置
        view.layout(curValue, curValue, curValue + view.getWidth(), curValue + view.getHeight());
    }});
//开始动画
valueAnimator.start();
//也可以设置延长n毫秒之后启动
//valueAnimator.setStartDelay(10000);
  • 方式二
//和ofInt的功能一样,只是一个Int类型,一个Float类型
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f,288.88f, 88.8f);
valueAnimator.setDuration(3000);
valueAnimator.setRepeatCount(1);
valueAnimator.setRepeatMode(ValueAnimator.INFINITE);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        Float animatedValue = (Float) animation.getAnimatedValue();
        //获取整数部分的值
        int curValue = animatedValue.intValue();
        view.layout(curValue, curValue, curValue + view.getWidth(), curValue + view.getHeight());
    }});
valueAnimator.start();
view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
          //点击取消当前动画
          valueAnimator.cancel();
    }});

注意:此时view的位置已经移动,点击此时的view是有反应的,这是和补间动画不同的,点击进入,后记中有标注

2.添加Listener 监听

valueAnimator.addListener(new Animator.AnimatorListener() {  
     @Override  
     public void onAnimationStart(Animator animation) {  
     }  
     @Override  
     public void onAnimationEnd(Animator animation) {  
     }  
     @Override  
     public void onAnimationCancel(Animator animation) {  
     }  
     @Override  
     public void onAnimationRepeat(Animator animation) {  
     }  
 });  
//执行结果 start->(repeat)->(cancel)->end

3.取消监听

//移除 AnimatorUpdateListener 
void removeUpdateListener(AnimatorUpdateListener listener);  
void removeAllUpdateListeners();  
//移除 AnimatorListener 
void removeListener(AnimatorListener listener);  
void removeAllListeners();

4.其他函数

//完全克隆一个 ValueAnimator 实例,包括它所有的设置以及所有对监听器代码的处理 
//和克隆差不多,两者除了外貌,并没有其他的关联哦~
public ValueAnimator clone() 

二、小试牛刀

一起尝试一下下边的例子如何实现吧!


引用自http://wiki.jikexueyuan.com/project/android-animation/6.html
  • 首先,可以看出这是一个在一定时间内变大的圆,并且最后回弹了,可以用BounceInterpolator

  • 那么,第一步,我们定义一个圆,在res/drawable下新建circle.xml文件



    
    

就可以得到这样一个圆:


动画第一步->ValueAnimator 基本使用_第1张图片
红红滴圆.png
  • 在布局中引用一下

  • 最后一步,java代码引用,yeah~
view = findViewById(R.id.view);
ValueAnimator valueAnimator = ValueAnimator.ofInt(20, 600);
valueAnimator.setDuration(3000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        int curValue = (int) animation.getAnimatedValue();
        ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
        layoutParams.width = layoutParams.height = curValue;
        view.setLayoutParams(layoutParams);
    }});
valueAnimator.setInterpolator(new BounceInterpolator());
valueAnimator.start();
}

后记:
Property Animator(属性动画) 包括 ValueAnimator 和 ObjectAnimation,Property Animator 是通过改变控件内部的属性值来达到动画效果的;
View Animation(视图动画) 包括 Tween Animation(补间动画)和 Frame Animation(逐帧动画),补间动画虽能对控件做动画,但并没有改变控件内部的属性值;之前的TranslateAnimation就是补间动画
专业术语,还是稍微记一下吧

你可能感兴趣的:(动画第一步->ValueAnimator 基本使用)