Android开发(10) 动画(Animation)

概述

Android SDK介绍了两种Animation:

  1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种 渐变动画 ,或者说 补间动画。
  2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画,或者说 逐帧动画。

渐变动画

4种渐变动画

alpha        渐变透明度动画效果
scale        渐变尺寸伸缩动画效果
translate  画面转换位置移动动画效果
rotate      画面转移旋转动画效果

实现动画的步骤:

1.准备一个animation对象,改对象可以看作是个动画对象,它描述(封装)了什么样式的动画。
我们可以在代码里手动创建这些对象,对应的4个animaiton对象类:

AlphaAnimation渐变透明度动画效果
ScaleAnimation渐变尺寸伸缩动画效果
TranslateAnimation画面转换位置移动动画效果
RotateAnimation画面转移旋转动画效果

XML方式

我也可以写一个描述动画的xml文件,放到资源文件的anim文件夹下。然后,在代码里加载(load)这个描述的文件:

int animationSrouceId  = 0;//资源文件的ID
Animation ani1 = AnimationUtils.loadAnimation(            
      getApplicationContext(), animationSrouceId); 
 return ani1;   

2.为view视图控件 指定 启动动画,调用startAnimation方法来完成。

     //组件播放动画 
     ImageView _imageView1;    
     _imageView1 =     (ImageView)findViewById(R.id.imageView1);     
      _imageView1.start        Animation(ani1); 

下图是我做的DEMO截图,动画的样式很难截图上来。我会在本文末尾放上源代码。


下面是xml描述的animation动画

透明alpha效果的代码:

<?xml version="1.0" encoding="utf-8"?>
<set   xmlns:android="http://schemas.android.com/apk/res/android"     >
    <alpha
          android:fromAlpha="0.3"
          android:toAlpha="1.0"
          android:duration="2000"
    /> 
<!-- 透明度控制动画效果 alpha
    浮点型值:
        fromAlpha 属性为动画起始时透明度
        toAlpha   属性为动画结束时透明度
        说明: 
            0.0表示完全透明
            1.0表示完全不透明
        以上值取0.0-1.0之间的float数据类型的数字
    
    长整型值:
        duration  属性为动画持续时间
        说明:     
            时间以毫秒为单位
  -->
</set>

旋转(rotate)

<?xml version="1.0" encoding="utf-8"?>
  <set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate 
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
      android:fromDegrees="0" 
    android:toDegrees="+350"         
    android:pivotX="50%" 
    android:pivotY="50%"     
    android:duration="3000" />  
<!-- rotate 旋转动画效果
   属性:interpolator 指定一个动画的插入器
         在我试验过程中,使用android.res.anim中的资源时候发现
         有三种动画插入器:
            accelerate_decelerate_interpolator   加速-减速 动画插入器
            accelerate_interpolator               加速-动画插入器
            decelerate_interpolator               减速- 动画插入器
         其他的属于特定的动画效果
                       
   浮点数型值:
        fromDegrees 属性为动画起始时物件的角度    
        toDegrees   属性为动画结束时物件旋转的角度 可以大于360度   

    
        说明:
                 当角度为负数——表示逆时针旋转
                 当角度为正数——表示顺时针旋转              
                 (负数from——to正数:顺时针旋转)   
                 (负数from——to负数:逆时针旋转) 
                 (正数from——to正数:顺时针旋转) 
                 (正数from——to负数:逆时针旋转)       

        pivotX     属性为动画相对于物件的X坐标的开始位置
        pivotY     属性为动画相对于物件的Y坐标的开始位置
            
        说明:        以上两个属性值 从0%-100%中取值
                     50%为物件的X或Y方向坐标上的中点位置

    长整型值:
        duration  属性为动画持续时间
        说明:       时间以毫秒为单位
  -->
  </set>

缩放(scale)

  <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <scale  
      android:interpolator=
                 "@android:anim/accelerate_decelerate_interpolator"
      android:fromXScale="0.0"
      android:toXScale="1.4"
      android:fromYScale="0.0"
      android:toYScale="1.4"
      android:pivotX="50%"
      android:pivotY="50%"
      android:fillAfter="false"
      android:duration="700" />
  </set>
  <!-- 尺寸伸缩动画效果 scale
   属性:interpolator 指定一个动画的插入器
    在我试验过程中,使用android.res.anim中的资源时候发现
    有三种动画插入器:
        accelerate_decelerate_interpolator  加速-减速 动画插入器
          accelerate_interpolator        加速-动画插入器
        decelerate_interpolator        减速- 动画插入器
    其他的属于特定的动画效果
  浮点型值:
     
        fromXScale 属性为动画起始时 X坐标上的伸缩尺寸    
        toXScale   属性为动画结束时 X坐标上的伸缩尺寸     
    
        fromYScale 属性为动画起始时Y坐标上的伸缩尺寸    
        toYScale   属性为动画结束时Y坐标上的伸缩尺寸    
    
        说明:
             以上四种属性值    

                0.0表示收缩到没有 
                1.0表示正常无伸缩     
                值小于1.0表示收缩  
                值大于1.0表示放大
    
        pivotX     属性为动画相对于物件的X坐标的开始位置
        pivotY     属性为动画相对于物件的Y坐标的开始位置
    
        说明:
                以上两个属性值 从0%-100%中取值
                50%为物件的X或Y方向坐标上的中点位置
    
    长整型值:
        duration  属性为动画持续时间
        说明:   时间以毫秒为单位

    布尔型值:
        fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
  -->

位移(translate )

  <?xml version="1.0" encoding="utf-8"?>
  <set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:fromXDelta="0"
    android:toXDelta="50"
    android:fromYDelta="0"
    android:toYDelta="50"
    android:duration="2000"
     android:fillAfter="true"  

/>

<!-- translate 位置转移动画效果
    整型值:
        fromXDelta 属性为动画起始时 X坐标上的位置    
        toXDelta   属性为动画结束时 X坐标上的位置
        fromYDelta 属性为动画起始时 Y坐标上的位置
        toYDelta   属性为动画结束时 Y坐标上的位置
        注意:
                 没有指定fromXType toXType fromYType toYType 时候,
                 默认是以自己为相对参照物             
    长整型值:
        duration  属性为动画持续时间
        说明:   时间以毫秒为单位
-->
</set>

逐帧动画演示(Frame Animation)

逐帧动画就是将多张图片按顺序展示,从而产生一种动态的效果。
效果演示:


1.准备几张连续的图片,编写动画描述文件(在anim资源文件夹下新建一个XML)。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
  android:oneshot="true">   
       <item android:drawable="@drawable/c1" android:duration="200" />  
 <item android:drawable="@drawable/c2" android:duration="200" /> 
 <item android:drawable="@drawable/c3" android:duration="200" />
 <item android:drawable="@drawable/c4" android:duration="200" />
 <item android:drawable="@drawable/c5" android:duration="200" />
 <item android:drawable="@drawable/c6" android:duration="200" />
</animation-list>

2.在窗体里放置一个ImageView 控件,并在代码里编写

      _imageView1 = (ImageView)findViewById(R.id.imageView1);//放置的ImageView 控件
    
    //设置动画背景
    _imageView1.setBackgroundResource(R.anim.animation_list); //其中R.anim.animation_list就是上一步准备的动画描述文件的资源名

    //获得动画对象
    _animaition = (AnimationDrawable) _imageView1.getBackground();

3.启动动画

            _animaition.setOneShot(false); //是否仅仅启动一次?
            if(_animaition.isRunning())//是否正在运行?
            {
                _animaition.stop();//停止
            }
            _animaition.start();//启动

渐变动画-源代码下载
帧- 源代码下载

参考

http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=564

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容