视图动画,也就是所谓的补间动画。指通过指定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 文件(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动画文件并将其设置到指定的View上
Animation alphaAnimation=AnimationUtils.loadAnimation(this, R.anim.alpha);//加载Xml文件中的动画
iv.startAnimation(alphaAnimation);
Animation rotateAnimation=new RotateAnimation(0, 45);
rotateAnimation.setDuration(2000);//设置动画持续时间为2秒
iv.startAnimation(rotateAnimation)
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动画文件并将其设置到指定的View上
Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);//加载Xml文件中的动画
iv.startAnimation(rotateAnimation)
Animation scaleAnimation=new ScaleAnimation(0.5f, 1.0f,1.0f, 1.0f);
scaleAnimation.setDuration(2000);//设置动画持续时间为2秒
scaleAnimation.setRepeatCount(2);
iv.startAnimation(scaleAnimation);
定义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动画文件并将其设置到指定的View上
Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);//加载Xml文件中的动画
iv.startAnimation(scaleAnimation)
Animation translateAnimation=new TranslateAnimation(0.5f, 1.0f,1.0f, 1.0f);
translateAnimation.setDuration(2000);//设置动画持续时间为2秒
translateAnimation.setRepeatCount(2);
iv.startAnimation(translateAnimation);
定义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动画文件并将其设置到指定的View上
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);//加载Xml文件中的动画
iv.startAnimation(translateAnimation)
定义动画集主要用到了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动画文件: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动画文件并将其设置到指定的View上
AnimationSet animationSet2=(AnimationSet) AnimationUtils.loadAnimation(this, R.anim.animset);
Frame动画,指通过指定的每一帧的图片和播放时间,有序的进行播放而形成的动画效果
开发步骤:
(1)把准备好的图片放进项目res/ drawable下。
(2)在项目的drawable文件夹下面定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。
(3)为View控件绑定动画效果。调用代表动画的AnimationDrawable的start()方法开始动画。
过不断地改变View的属性,不断重绘而形成动画效果。相比较视图动画,View的属性是真正改变了
注意:Android3.0(API 11)以上才支持。
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();