Android 动画大概能够分为两类,一类是 Tween 动画(补间动画),即经过对场景里的对象不断作图像变换(平移、缩放、旋转)产生动画效果;第二类是 Frame 动画,即顺序播放设置好的每个图像(逐帧动画)。php
Animation表明抽象的动画类,它的实现类有以下几个:AlphaAnimation、ScaleAnimation、RotateAnimation、TranslateAnimation、AnimationSet。java
动画类型 | 标签 | java实现方式 |
---|---|---|
渐变透明度动画 | alpha | AlphaAnimation |
渐变尺寸伸缩动画 | scale | ScaleAnimation |
旋转动画 | rotate | RotateAnimation |
位移变化动画 | transtate | TranslateAnimation |
渐变透明度动画 | set | AnimationSet |
属性 | 说明 |
---|---|
fromAlpha | 开始透明度(从0.0 --1.0 ,0.0表示全透明,1.0表示彻底不透明) |
toAlpha | 结束透明度(从0.0 --1.0 ,0.0表示全透明,1.0表示彻底不透明) |
属性 | 说明 |
---|---|
fromXScale | 起始的X方向上相对自身的缩放比例,浮点值,好比1.0表明自身无变化,0.5表明起始时缩小一倍,2.0表明放大一倍 |
toXScale | 结尾的X方向上相对自身的缩放比例,浮点值 |
fromYScale | 起始的Y方向上相对自身的缩放比例,浮点值 |
toYScale | 结尾的Y方向上相对自身的缩放比例,浮点值 |
pivotX | 缩放起点X轴坐标,能够是数值、百分数、百分数p 三种样式,好比 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,作为起始缩放点;若是是50%,表示在当前控件的左上角加上本身宽度的50%作为起始点;若是是50%p,那么就是表示在当前的左上角加上父控件宽度的50%作为起始点x轴坐标 |
pivotY | 缩放起点Y轴坐标(同pivotX) |
属性 | 说明 |
---|---|
fromDegrees | 开始旋转的角度位置,正值表明顺时针方向度数,负值代码逆时针方向度数 |
toDegrees | 结束时旋转到的角度位置,正值表明顺时针方向度数,负值代码逆时针方向度数 |
pivotX | 控件的左上角即为控件的坐标原点,这里的起始点是在控件的原点的基础上向X轴加上指定的像素,作为起始点(可设置具体值也可设置百分比) |
pivotY | 控件的左上角即为控件的坐标原点,这里的起始点是在控件的原点的基础上向Y轴加上指定的像素,作为起始点(可设置具体值也可设置百分比) |
属性 | 说明 |
---|---|
fromXDelta | 起始点X轴坐标,能够是数值、百分数、百分数p 三种样式,好比 50、50%、50%p(同pivotX) |
fromYDelta | 起始点Y轴从标,能够是数值、百分数、百分数p 三种样式(同pivotY) |
toXDelta | 结束点X轴坐标 |
toYDelta | 结束点Y轴坐标 |
属性 | 说明 |
---|---|
duration | 动画持续时间 |
fillAfter | 动画结束后是否保挂当前透明度 |
fillBefore | 还原到开始动画前的状态 |
repeatCount | 重复次数 |
repeatMode | 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示从新放一遍,必须与repeatCount一块儿使用才能看到效果 |
在res文件夹下,新建一个anim文件夹,而后再新建一个.xml动画文件,以下:android
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000" android:fillAfter="true">
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"/>
<scale android:fromXScale="0.0" android:toXScale="1.4" android:fromYScale="0.0" android:toYScale="1.4" android:pivotX="50%" android:pivotY="50%"/>
<rotate android:fromDegrees="0" android:toDegrees="720" android:pivotX="50%" android:pivotY="50%"/>
</set>
复制代码
代码使用动画动画
Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.动画文件名);从XML文件中获取动画
控件.startAnimation(scaleAnimation);
复制代码
逐帧动画也就是依次显示静态图片,就是播放电影同样,一般咱们使用xml的形式去定义,固然也可使用代码控制。this
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">//oneshot:是否只播放一次
<item
android:drawable="@mipmap/lottery_1"
android:duration="200"/>//duration:这一帧持续的时间
<item
android:drawable="@mipmap/lottery_2"
android:duration="200"/>
<item
android:drawable="@mipmap/lottery_3"
android:duration="200"/>
</animation-list>
复制代码
xml中直接使用spa
<ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="10dp" android:src="@drawable/frame" />
复制代码
代码控制rest
imageView = (ImageView)findViewById(R.id.iv);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.start();
animationDrawable.stop();
复制代码
在代码中定义动画资源code
AnimationDrawable anim = new AnimationDrawable();
for (int i = 1; i <= 6; i++) {
int id = getResources().getIdentifier("lottery_" + i, "mipmap", getPackageName());
Drawable drawable = getResources().getDrawable(id);
anim.addFrame(drawable, 200);//添加帧
}
anim.setOneShot(false);//设置为循环播放
imageView.setImageDrawable(anim);
anim.start();
复制代码