阅读 20

Android动画属性说明及使用

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

补间动画

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

动画类型 标签 java实现方式
渐变透明度动画 alpha AlphaAnimation
渐变尺寸伸缩动画 scale ScaleAnimation
旋转动画 rotate RotateAnimation
位移变化动画 transtate TranslateAnimation
渐变透明度动画 set AnimationSet
  • alpha
属性 说明
fromAlpha 开始透明度(从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明)
toAlpha 结束透明度(从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明)
  • scale
属性 说明
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)
  • rotate
属性 说明
fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
pivotX 控件的左上角即为控件的坐标原点,这里的起始点是在控件的原点的基础上向X轴加上指定的像素,做为起始点(可设置具体值也可设置百分比)
pivotY 控件的左上角即为控件的坐标原点,这里的起始点是在控件的原点的基础上向Y轴加上指定的像素,做为起始点(可设置具体值也可设置百分比)
  • transtate
属性 说明
fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p(同pivotX)
fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式(同pivotY)
toXDelta 结束点X轴坐标
toYDelta 结束点Y轴坐标
  • set set标签无自身的动画属性,只有继承Animation的属性,这是每一个动画标签都有的属性,而set标签就是将多个动画标签放到一起组合的动画。
属性 说明
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文件夹
<?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中直接使用

<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();
复制代码
关注下面的标签,发现更多相似文章
评论