android 动画

补间动画(Tween 动画)

视图动画,也就是所谓的补间动画。指通过指定View的初始状态、变化时间、方式、通过一系列的算法去进行图片变换(平移、缩放、旋转、改变透明度),可以采用XML来做也可以采用编码来做。

从而实现动画效果。主要有scale、alpha、Translate、Rotate四种效果。

动画类型 名称
渐变透明度动画 alpha(AlphaAnimation)
渐变尺寸缩放动画 scale(ScaleAnimation)
渐变位置移动动画 translate(TranslateAnimation)
渐变旋转动画 rotate(RotateAnimation)

透明度动画 实现淡入淡出的动画效果

  • 方式一:通过代码实现
 Animation alphaAnimation = new AlphaAnimation(1, (float) 0.1);
 alphaAnimation.setDuration(2000);//设置动画持续时间为2秒
 iv.startAnimation(alphaAnimation);
  • 方式二 通过在xml中实现
xml 文件(alpha)
<?xml version="1.0" encoding="utf-8"?>
<alphaxmlns:android="https://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.1"
android:duration="2000">

java 代码调用xml文件 将xml动画文件并将其设置到指定的ViewAnimation alphaAnimation=AnimationUtils.loadAnimation(this, R.anim.alpha);//加载Xml文件中的动画
iv.startAnimation(alphaAnimation);

旋转的动画

  • 方式一 java 代码实现
Animation rotateAnimation=new RotateAnimation(0, 45);
rotateAnimation.setDuration(2000);//设置动画持续时间为2秒
iv.startAnimation(rotateAnimation)
  • 方式二 xml 实现
xml 文件(rotate)
<?xml version="1.0" encoding="utf-8"?>
<rotatexmlns:android="https://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="45"
android:duration="2000">

java 代码调用xml文件 ,将xml动画文件并将其设置到指定的ViewAnimation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);//加载Xml文件中的动画
iv.startAnimation(rotateAnimation)

缩放动画

  • 方式一通过java代码 实现
Animation scaleAnimation=new ScaleAnimation(0.5f, 1.0f,1.0f, 1.0f);
scaleAnimation.setDuration(2000);//设置动画持续时间为2秒
scaleAnimation.setRepeatCount(2);
iv.startAnimation(scaleAnimation);
  • 方式二通过在xml实现
定义xml动画文件:scale.xml

<?xml version="1.0" encoding="utf-8"?>
<scalexmlns:android="https://schemas.android.com/apk/res/android"
android:fromXScale="0.5"
android:toXScale="1.0"
android:fromYScale="1.0"
android:toYScale="1.0"
android:duration="2000">
java 代码调用 加载xml动画文件并将其设置到指定的ViewAnimation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);//加载Xml文件中的动画
iv.startAnimation(scaleAnimation)

位移动画

  • 方式一通过java代码 实现
Animation translateAnimation=new TranslateAnimation(0.5f, 1.0f,1.0f, 1.0f);
translateAnimation.setDuration(2000);//设置动画持续时间为2秒
translateAnimation.setRepeatCount(2);
iv.startAnimation(translateAnimation);
  • 方式二通过在xml实现
定义xml动画文件:translate.xml

<?xml version="1.0" encoding="utf-8"?>
<scalexmlns:android="https://schemas.android.com/apk/res/android"
android:fromXScale="0.5"
android:toXScale="1.0"
android:fromYScale="1.0"
android:toYScale="1.0"
android:duration="2000">
java 代码调用 加载xml动画文件并将其设置到指定的ViewAnimation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);//加载Xml文件中的动画
iv.startAnimation(translateAnimation)

动画集 AnimationSet实现多种动画混合效果

定义动画集主要用到了AnimationSet类,该类可以添加多个补间动画啊。

  • 方式一通过代码
AnimationSet animationSet=new AnimationSet(true);//定义一个动画集,并设定所有的动画使用一个动画入其
Animation translateAnimation=AnimationUtils.loadAnimation(this, R.anim.translate);//加载Xml文件中的动画
Animation alphaAnimation=AnimationUtils.loadAnimation(this, R.anim.alpha);//加载Xml文件中的动画
Animation rotateAnimation=AnimationUtils.loadAnimation(this, R.anim.rotate);//加载Xml文件中的动画
Animation scaleAnimation=AnimationUtils.loadAnimation(this, R.anim.scale);//加载Xml文件中的动画
animationSet.addAnimation(translateAnimation);
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(scaleAnimation);
iv.startAnimation(animationSet);
  • 方式二在xml文件中设置动画集合
定义xml动画文件:animset.xml
<?xml version="1.0" encoding="utf-8"?>
<setxmlns:android="https://schemas.android.com/apk/res/android">
android:fromAlpha="1.0"
android:toAlpha="0.1"
android:duration="3000"
android:fillAfter="true"
android:repeatCount="2">
android:fromDegrees="0"
android:toDegrees="45"
android:duration="3000"
android:fillAfter="true">
android:fromXScale="0.5"
android:toXScale="1.0"
android:fromYScale="1.0"
android:toYScale="1.0"
android:duration="3000"
android:fillAfter="true">
android:fromXDelta="0"
android:toXDelta="260"
android:fromYDelta="0"
android:toYDelta="600"
android:duration="3000"
android:interpolator="@android:anim/accelerate_decelerate_interpolator">

加载xml动画文件并将其设置到指定的ViewAnimationSet animationSet2=(AnimationSet) AnimationUtils.loadAnimation(this, R.anim.animset);

帧动画(Frame)

Frame动画,指通过指定的每一帧的图片和播放时间,有序的进行播放而形成的动画效果
开发步骤:
(1)把准备好的图片放进项目res/ drawable下。
(2)在项目的drawable文件夹下面定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。
(3)为View控件绑定动画效果。调用代表动画的AnimationDrawable的start()方法开始动画。

属性动画(ObjectAnimator , ValueAnimator)

过不断地改变View的属性,不断重绘而形成动画效果。相比较视图动画,View的属性是真正改变了
注意:Android3.0(API 11)以上才支持。

  1. object必须要提供setXxx方法,如果动画的时候没有传递初始值,那么还要提供getXxx方法,因为系统要去拿xxx属性的初始值(如不满足,程序直接Crash)
  2. object的setXxx对属性xxx所做的改变必须能够通过某种方法反映出来,比如会带来ui的改变。

平移动画:

ObjectAnimator.ofFloat(view, "translationX", 0f, 200f)
            .setDuration(1000)
            .start();

透明度动画

 ObjectAnimator.ofFloat(view, "alpha", 1f, 0f)
            .setDuration(1000)
            .start();

缩放动画

ObjectAnimator.ofFloat(view, "scaleX", 1f, 0f)
            .setDuration(1000)
            .start()

旋转动画

ObjectAnimator.ofFloat(view, "rotation", 0f, 360f)
            .setDuration(1000)
            .start();

补间动画和属性动画主要区别

  • 对象不同,补间动画只能作用在view上,属性动画可以作用在所有对象上。
  • 属性变化不同,补间动画只是改变显示效果,不会改变view的属性,比如位置、宽高等,而属性动画实际改变对象的属性。
  • 效果不同,补间动画只能实现位移、缩放、旋转和透明度四种动画操作,而属性动画还能实现补间动画所有效果及其他更多动画效果。

你可能感兴趣的:(android,动画,Animation)