Android中属性动画的基本用法(总结)

属性动画出现的意义:弥补补间动画的不足,实现其实现不了的效果。

属性动画的实现机制:通过对目标对象进行赋值并修改其属性来实现的。

属性动画的常用类:

(1)ValueAnimator类:对Value值进行的动画过渡效果操作类。(用的不多)

(2)ObjectAnimator类:这个是对View对象进行的动画过渡效果操作类。(重要!!!)

(3)AnimatorSet类:这是对组合动画效果的操作类。(重要!!!)

属性动画的常用动画效果:

(1)淡入淡出

JAVA代码:

ObjectAnimator animator = ObjectAnimator.ofFloat(tvEffectShow, "alpha", 1f, 0f, 1f);
animator.setDuration(3000);
animator.start();

XML(动画文件):




    

    

(2)旋转效果

JAVA代码:

ObjectAnimator animator = ObjectAnimator.ofFloat(tvEffectShow, "rotation", 1f, 360f);
animator.setDuration(3000);
animator.start();

XML动画文件:


(3)移动效果

JAVA代码:

//获取组件的当前x坐标
Float transitionX = tvEffectShow.getTranslationX();
ObjectAnimator animator = ObjectAnimator.ofFloat(tvEffectShow, "translationX"
        , transitionX, -1000f, transitionX);
animator.setDuration(3000);
animator.start();

XML动画文件:(如何想上面一样,就把下面改成组合动画,参照淡入淡出的XML动画文件)


(4)缩放效果

JAVA代码:

ObjectAnimator animator = ObjectAnimator.ofFloat(tvEffectShow, "scaleY", 1f, 3f, 1f);
animator.setDuration(3000);
animator.start();

XML动画文件:


(5)组合动画效果

JAVA代码:

AnimatorSet animatorSet = new AnimatorSet();

Float transitionX = tvEffectShow.getTranslationX();
ObjectAnimator animatorTranslationX = ObjectAnimator.ofFloat(tvEffectShow, "translationX"
        , transitionX, -1000f, transitionX);

ObjectAnimator animatorScaleY = ObjectAnimator.ofFloat(tvEffectShow, "scaleY", 1f, 3f, 1f);

ObjectAnimator animatorRotation = ObjectAnimator.ofFloat(tvEffectShow, "rotation", 1f, 360f);

animatorSet.setDuration(5000);
animatorSet.play(animatorTranslationX).with(animatorScaleY).before(animatorRotation);
animatorSet.start();

XML动画文件:




    

    

        

        

            

            

        

        

        

    

XML动画文件如何创建?

在res文件夹下创建一个animator文件夹,这些动画文件应该创建在这个animator文件夹下。

XML动画文件如何使用?

//创建动画对象并加载XML动画文件
Animator animator = AnimatorInflater.loadAnimator(mContext, R.animator.anim_alpha);
//动画时长
animator.setDuration(3000);
//给View对象设置动画效果
animator.setTarget(tvEffectShow);
//开始动画效果
animator.start();

Animator动画对象如何添加监听操作?

//添加动画监听事件
animator.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        Toast.makeText(mContext, "动画播放完毕", Toast.LENGTH_SHORT).show();
        super.onAnimationEnd(animation);
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
        Toast.makeText(mContext, "动画播放重复", Toast.LENGTH_SHORT).show();
        super.onAnimationRepeat(animation);
    }

    @Override
    public void onAnimationStart(Animator animation) {
        Toast.makeText(mContext, "动画播放开始", Toast.LENGTH_SHORT).show();
        super.onAnimationStart(animation);
    }
});

附加:

Animator对象还有一些其他方法:(在XML动画文件中设置,效果是一样的!)

setStartDelay():设置动画延迟播放的时间。

setRepeatCount():动画循环播放的次数。-1代表无限循环播放。

setRepeatMode():动画循环播放的模式。(ValueAnimator.RESTART和ValueAnimator.REVERSE两个模式,即重新播放和倒序播放两个模式)

setInterpolator():这个用于控制动画播放的速度(系统控制速度的模式比较多,需要的时候在网上查即可)。常用的匀速如下:

//匀速转动
LinearInterpolator lir = new LinearInterpolator();
animator.setInterpolator(lir);

动画播放速度的常用方法有以下几种:

我们可以在xml里面设置属性

android:interpolator="@android:anim/accelerate_interpolator" 设置动画为加速动画(动画播放中越来越快)  
  
android:interpolator="@android:anim/decelerate_interpolator" 设置动画为减速动画(动画播放中越来越慢)  
  
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 设置动画为先加速在减速(开始速度最快 逐渐减慢)  
  
android:interpolator="@android:anim/anticipate_interpolator" 先反向执行一段,然后再加速反向回来(相当于我们弹簧,先反向压缩一小段,然后在加速弹出)  
  
android:interpolator="@android:anim/anticipate_overshoot_interpolator" 同上先反向一段,然后加速反向回来,执行完毕自带回弹效果(更形象的弹簧效果)  
  
android:interpolator="@android:anim/bounce_interpolator" 执行完毕之后会回弹跳跃几段(相当于我们高空掉下一颗皮球,到地面是会跳动几下)  
  
android:interpolator="@android:anim/cycle_interpolator" 循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2* mCycles* Math.PI* input)  
  
android:interpolator="@android:anim/linear_interpolator" 线性均匀改变  
  
android:interpolator="@android:anim/overshoot_interpolator" 加速执行,结束之后回弹  

然后我们在代码中也可以设置,顺序效果同上 

animation.setInterpolator(new AccelerateInterpolator());  
  
animation.setInterpolator(new DecelerateInterpolator());  
  
animation.setInterpolator(new AccelerateDecelerateInterpolator());  
  
animation.setInterpolator(new AnticipateInterpolator());  
  
animation.setInterpolator(new AnticipateOvershootInterpolator());  
  
animation.setInterpolator(new BounceInterpolator());  
  
animation.setInterpolator(new CycleInterpolator(2));  
  
animation.setInterpolator(new LinearInterpolator());  
  
animation.setInterpolator(new OvershootInterpolator());  

特别注意!!!:

一定要明白,属性动画不止上面的这几个动画样式!!!因为属性动画的本质,是通过修改目标对象的属性来实现动画效果的。那么,只要是View对象的属性,都可以进行属性动画效果的修改。

 

完整Demo地址:https://download.csdn.net/download/lpcrazyboy/10724059

你可能感兴趣的:(Android开发)