Android动画属性说明及使用

Android 动画大概可以分为两类,一类是 Tween 动画(补间动画),即通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果;第二类是 Frame 动画,即顺序播放设置好的每一个图像(逐帧动画)。

补间动画

Animation代表抽象的动画类,它的实现类有如下几个:AlphaAnimation、ScaleAnimation、RotateAnimation、TranslateAnimation、AnimationSet。

动画类型 标签 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动画文件,如下:

<?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的形式去定义,当然也可以使用代码控制。

  1. 在drawable文件夹下新建一个文件frame.xml,而不是anim文件夹 ```android <?xml version=”1.0” encoding=”utf-8”?>
//oneshot:是否只播放一次 //duration:这一帧持续的时间
xml中直接使用

```xml
<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" />

代码控制

imageView = (ImageView)findViewById(R.id.iv);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.start();
animationDrawable.stop();

在代码中定义动画资源

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();