【Android】两种动画介绍(Tween动画、Frame动画)

        Android中的动画类型有两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。下面将一一详细介绍:

       本博客参考自网络,结合自己一点理解,实为学习之用,不为其他目的。

一,Tween动画

        又称“补间动画”、“中间动画”,最早接触Tween类是在学习Flash时候,使用ActionScript做动画的时候,使用过类Tween。

        Tween动画主要的功能是在绘制动画前设置动画绘制的轨迹,包括时间, 位置 ,等等。但是Tween动画的缺点是它只能设置起始点与结束点的两帧,中间过程全部由系统帮我们完成。所以在帧数比较多的游戏开发中是不太会用到它的。
       Tween一共提供了4中动画的效果

       Scale:缩放动画
       Rotate:旋转动画
       Translate:移动动画
       Alpha::透明渐变动画

      Tween与Frame动画类似都需要在res\anim路径下创建动画的 布局文件

   1)Scale动画

         

/anim/scalelitte.xml

/anim/scalebig.xml

如果在代码中,加载动画,而不用xml配置动画



2)Rotate旋转动画



/anim/retateleft.xml

/anim/retateright.xml


 如果在代码中加载动画,而不用xml配置,代码如下


3)Translate移动动画
/layout/translate.xml

/anim/translate.xml


说明:
代码中加载动画:
4 )Alpha:透明渐变动画

/anim/alpha.xml


说明:
手动加载动画:
5)综合动画

可以将上面介绍的4种动画设置在一起同时进行播放,那么就须要使用<set>标签将所有须要播放的动画放在一起。

这个动画布局设置动画同时播放
移动、渐变、旋转


/anim/all.xml


二,AnimationDrable实现Frame动画(设计游戏专用,嘎嘎嘎)感谢宣教主分享



/layout/simple.xml


控制帧播放的/anim/animation.xml

      看看内容应该是很好理解的,<animation-list>为动画的总标签,这里面放着帧动画 <item>标签,也就是说若干<item>标签的帧 组合在一起就是帧动画了。<animation-list > 标签中android:oneshot="false" 这是一个非常重要的属性,默认为false 表示 动画循环播放, 如果这里写true 则表示动画只播发一次。 <item>标签中记录着每一帧的信息android:drawable="@drawable/a"表示这一帧用的图片为"a",下面以此类推。  android:duration="100" 表示这一帧持续100毫秒,可以根据这个值来调节动画播放的速度。

这是一个比较简单的布局文件,应该都能看懂吧。  我主要说一下 最后的这个 ImageView, 它就是用来显示我们的动画。 这里使用android:background="@anim/animation"设置这个ImageView现实的背景为一个动画,动画资源的路径为res/anim/animation.xml   ,当然 设置background同样也可以在代码中设置。


[java] view plaincopy
  1. imageView.setBackgroundResource(R.anim.animation);  




通过getBackground方法就可以拿到这个animationDrawable对象。


[java] view plaincopy
  1. /**拿到ImageView对象**/  
  2. imageView = (ImageView)findViewById(R.id.imageView);  
  3. /**通过ImageView对象拿到背景显示的AnimationDrawable**/  
  4. animationDrawable = (AnimationDrawable) imageView.getBackground();  


AnimationDrawable 就是用来控制这个帧动画,这个类中提供了很多方法。

animationDrawable.start(); 开始这个动画
animationDrawable.stop(); 结束这个动画
animationDrawable.setAlpha(100);设置动画的透明度, 取值范围(0 - 255)
animationDrawable.setOneShot(true); 设置单次播放
animationDrawable.setOneShot(false); 设置循环播放
animationDrawable.isRunning(); 判断动画是否正在播放
animationDrawable.getNumberOfFrames(); 得到动画的帧数。


宣教主警戒:拖动进度条设置Alpha值的时候 一定要使用     imageView.postInvalidate(); 方法来通知UI线程重绘屏幕中的imageView  否则会看不到透明的效果 。这里切记切记~~


谢谢CSDN博主宣雨松,牛人一枚。以后还会多多向他学习。




posted on 2012-04-20 18:13  小田的专栏  阅读(11452)  评论(1编辑  收藏  举报

导航