`
dss16694
  • 浏览: 144233 次
社区版块
存档分类
最新评论

Android画图学习总结-Animation(上)

 
阅读更多

随着对Drewable的深入了解,发现了Drawable更加强大的功能:显示Animation。Android SDK介绍了2种Animation:

  • Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果
  • Frame Animation:顺序播放事先做好的图像,跟电影类似

在使用Animation前,我们先学习如何定义Animation,这对我们使用Animation会有很大的帮助。Animation是以XML格式定义的,定义好的XML文件存放在res\anim中。由于Tween Animation与Frame Animation的定义、使用都有很大的差异,我们将分开介绍,本篇幅中介绍Tween Animation的定义与使用,后续篇幅再详细介绍Frame Animation。按照XML文档的结构【父节点,子节点,属性】来介绍Tween Animation,其由4种类型:

  • Alpha:渐变透明度动画效果
  • Scale:渐变尺寸伸缩动画效果
  • Translate:画面转换位置移动动画效果
  • Rotate:画面转换位置移动动画效果

在介绍以上4种类型前,先介绍Tween Animation共同的节点属性,关于节点的命名原则,请阅读AndroidManifest.xml文件结构说明

表一

属性[类型] 功能  
Duration[long] 属性为动画持续时间 时间以毫秒为单位
fillAfter [boolean] 当设置为true ,该动画转化在动画结束后被应用
fillBefore[boolean] 当设置为true ,该动画转化在动画开始前被应用

interpolator

指定一个动画的插入器 有一些常见的插入器
accelerate_decelerate_interpolator
加速-减速 动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速- 动画插入器
其他的属于特定的动画效果
repeatCount[int] 动画的重复次数  
RepeatMode[int] 定义重复的行为 1:重新开始  2:plays backward
startOffset[long] 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
zAdjustment[int] 定义动画的Z Order的改变 0:保持Z Order不变
1:保持在最上层
-1:保持在最下层

看了以上节点,大家是不是都想开始定义动画了。下面我们就开始结合具体的例子,介绍4种类型各自特有的节点元素。

表二

XML节点 功能说明
alpha 渐变透明度动画效果
<alpha
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″ />
fromAlpha

属性为动画起始时透明度

0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之间的float数据类型的数字
toAlpha 属性为动画结束时透明度

表三

scale 渐变尺寸伸缩动画效果
<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:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″ />
fromXScale[float] fromYScale[float] 为动画起始时,X、Y坐标上的伸缩尺寸 0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
toXScale [float]
toYScale[float]
为动画结束时,X、Y坐标上的伸缩尺寸
pivotX[float]
pivotY[float]
为动画相对于物件的X、Y坐标的开始位置 属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置
       

表四

translate 画面转换位置移动动画效果
<translate
android:fromXDelta=”30″
android:toXDelta=”-80″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″ />
fromXDelta
toXDelta
为动画、结束起始时 X坐标上的位置  
fromYDelta
toYDelta
为动画、结束起始时 Y坐标上的位置  
       

表五

rotate 画面转移旋转动画效果
<rotate
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″ />
fromDegrees 为动画起始时物件的角度 说明
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)
(负数from——to负数:逆时针旋转)
(正数from——to正数:顺时针旋转)
(正数from——to负数:逆时针旋转)
toDegrees 属性为动画结束时物件旋转的角度 可以大于360度
pivotX
pivotY
为动画相对于物件的X、Y坐标的开始位 说明:以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置
       

看了上面的例子,想必大家也想看下,这些定义的动画,运行起来是什么样效果,下面运行Scale例子中的动画,界面变化如下:

Animation-1 Aniamtion-2
Aniamtion-3 Animation-4
     

按照上面的讲述学习完了Tween Animation的定义,对Tween Animation有了详细的了解,再去了解下Android SDK的animation package(android.view.animation),其提供了操作Tween Animation所有的类。

Android SDK提供了基类:Animation,包含大量的set/getXXXX()函数来设置、读取Animation的属性,也就是前面表一中显示的各种属性。Tween Animation由4种类型:alpha、scale、translate、roate,在Android SDK中提供了相应的类,Animation类派生出了AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation分别实现了平移、旋转、改变 Alpha 值等动画,每个子类都在父类的基础上增加了各自独有的属性。再去看下这几个类的构造函数,是不是与我们在表二、表三、表四、表五种定义的属性完全一样。
Animation

在了解了Tween Animation的定义,对android.view.animation有了一些基本的认识后,开始介绍Tween Animation如何使用。Android SDK提供了2种方法:直接从XML资源中读取Animation,使用Animation子类的构造函数来初始化Animation对象,第二种方法在看了Android SDK中各个类的说明就知道如何使用了,下面简要说明从XML资源中读取Animation,按照应用程序开发的过程,介绍整个使用的过程,如下:

  1. 创建Android工程;
  2. 导入一张图片资源;
  3. 将res\layout\main.xml中的TextView取代为ImageView;
  4. 在res下创建新的文件夹anim,并在此文件夹下面定义Animation XML文件;
  5. 修改OnCreate()中的代码,显示动画资源;

关键代码,解析如下:
//main.xml中的ImageView
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
//加载动画
Animation hyperspaceJumpAnimation =
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
//使用ImageView显示动画
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
工程的源代码提供给大家下载,下载地址,这里简要解析如下:

  • AnimationUtils提供了加载动画的函数,除了函数loadAnimation(),其他的到Android SDK中去详细了解吧;
  • 所谓的动画,也就是对 view 的内容做一次图形变换;

总结说明

看了这个长篇幅的介绍,详细大家对Tween Animation的定义、使用都有了比较深入的了解,由于篇幅有限,这里将Android SDK中的内容省略了不少,比如说:Interpolator,需要大家自己去Android SDK中仔细阅读。

分享到:
评论

相关推荐

    Android画图学习.pdf

    • Android画图学习总结(四)——Animation(上) • Android画图学习总结(四)——Animation(中) • Android画图学习总结(四)——Animation(下) • Android画图学习总结(五)——Paint Android 画图...

    Android画图学习

    • Android画图学习总结(四)——Animation(上) • Android画图学习总结(四)——Animation(中) • Android画图学习总结(四)——Animation(下) • Android画图学习总结(五)——Paint Android画图...

    Android画图学习笔记

    Android画图学习笔记。针对android中的画图中需要的一些类进行介绍,例如Bitmap, Paint, Drawable, Animation等。

    android开发资料大全

    最无私的Android资料(书籍+代码)分享[总结] Android中文帮助教程(非常合适新手入门) android程序编写及调试新手入门 大家一起学Android(Windows篇) android入门与提高必看指南 Android入门逆引手册 Android...

    通过GLS实现Android 帧动画绘制

    通过GLS实现Android 帧动画绘制,解决图片太大或者图片数量过多时,annimation 动画引起的内存溢出问题,

    android开发demo集合

    41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯...

    android初学者入门项目

    41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯...

    Android游戏源码类似超级玛丽的积分类小游戏

    这是一款类似积分类的小游戏项目源码,与flappy bird游戏非常相像,项目中运用了animation和painter进行画图,主要功能有开始游戏和查看分数,可以拖拽游戏中的小人进行各种动作,相对于简单但很有趣。项目中注释很...

    android自定义view实现数字进度条

    之前看到过一个数字进度条,一直想写,今天就...import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.P

    Super Mary_Mary_游戏_android_

    一款类似超级玛丽的积分类小游戏项目源码,与flappy bird游戏非常相像,项目中运用了animation和painter进行画图

    Android自定义View实现可展开、会呼吸的按钮

    1、按照国际惯例,就是新建attrs,写各种需要的属性,然后获取,新建各种所需的Paint、Rect,重写onMeasure计算宽高,重写onDraw画图搞起。。 2、关于可展开效果,其实就是点击发布时,启动一个ValueAnimator,对一...

Global site tag (gtag.js) - Google Analytics