今天和大伙讨论一下Android开发中的Tween动画的实现。首先它和上一章我们讨论的Frame动画同属于系统提供的绘制动画的方法。Tween动画主要的功能是在绘制动画前设置动画绘制的轨迹,包括时间, 位置 ,等等。但是Tween动画的缺点是它只能设置起始点与结束点的两帧,中间过程全部由系统帮我们完成。所以在帧数比较多的游戏开发中是不太会用到它的。

Tween一共提供了4中动画的效果

Scale:缩放动画

Rotate:旋转动画

Translate:移动动画

Alpha::透明渐变动画

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

补充:最近有盆友提问可不可以不用XML配置动画,希望可以在代码中配置。那MOMO当然要向大家补充了噢~~~

1.Scale缩放动画

标签为缩放节点

android:fromXscale=”1.0″ 表示开始时X轴缩放比例为 1.0 (原图大小 * 1.0 为原图大小)

android:toXscale=”0.0″表示结束时X轴缩放比例为0.0(原图大小 *0.0 为缩小到看不见)

android:fromYscale=”1.0″ 表示开始时Y轴缩放比例为 1.0 (原图大小 * 1.0 为原图大小)

android:toYscale=”0.0″表示结束时Y轴缩放比例为0.0(原图大小 *0.0 为缩小的看不到了)

android:pivotX=”50%” X轴缩放的位置为中心点

android:pivotY=”50%” Y轴缩放的位置为中心点

android:duration=”2000″ 动画播放时间 这里是2000毫秒也就是2秒

这个动画布局设置动画从大到小进行缩小。

C#

1

2

3

4

5

6

7

8

9

10

android:fromXScale="1.0"

android:toXScale="0.0"

android:fromYScale="1.0"

android:toYScale="0.0"

android:pivotX="50%"

android:pivotY="50%"

android:duration="2000">

在代码中加载动画

C#

1

2

3

4

mLitteAnimation=newScaleAnimation(0.0f,1.0f,0.0f,1.0f,

Animation.RELATIVE_TO_SELF,0.5f,

Animation.RELATIVE_TO_SELF,0.5f);

mLitteAnimation.setDuration(2000);

代码如下

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.animation.Animation;

importandroid.view.animation.AnimationUtils;

importandroid.widget.Button;

importandroid.widget.ImageView;

publicclassScaleActivityextendsActivity{

/**缩小动画按钮**/

ButtonmButton0=null;

/**放大动画按钮**/

ButtonmButton1=null;

/**显示动画的ImageView**/

ImageViewmImageView=null;

/**缩小动画**/

AnimationmLitteAnimation=null;

/**放大动画**/

AnimationmBigAnimation=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.scale);

/**拿到ImageView对象**/

mImageView=(ImageView)findViewById(R.id.imageView);

/**加载缩小与放大动画**/

mLitteAnimation=AnimationUtils.loadAnimation(this,R.anim.scalelitte);

mBigAnimation=AnimationUtils.loadAnimation(this,R.anim.scalebig);

mButton0=(Button)findViewById(R.id.button0);

mButton0.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewarg0){

/**播放缩小动画**/

mImageView.startAnimation(mLitteAnimation);

}

});

mButton1=(Button)findViewById(R.id.button1);

mButton1.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewarg0){

/**播放放大动画**/

mImageView.startAnimation(mBigAnimation);

}

});

}

}

2.Rotate旋转动画

标签为旋转节点

Tween一共为我们提供了3种动画渲染模式。

android:interpolator=”@android:anim/accelerate_interpolator” 设置动画渲染器为加速动画(动画播放中越来越快)

android:interpolator=”@android:anim/decelerate_interpolator” 设置动画渲染器为减速动画(动画播放中越来越慢)

android:interpolator=”@android:anim/accelerate_decelerate_interpolator” 设置动画渲染器为先加速在减速(开始速度最快 逐渐减慢)

如果不写的话 默认为匀速运动

android:fromDegrees=”+360″设置动画开始的角度

android:toDegrees=”0″设置动画结束的角度

这个动画布局设置动画将向左做360度旋转加速运动。

C#

1

2

3

4

5

6

7

8

9

android:interpolator="@android:anim/accelerate_interpolator"

android:fromDegrees="+360"

android:toDegrees="0"

android:pivotX="50%"

android:pivotY="50%"

android:duration="2000"

/>

在代码中加载动画

C#

1

2

3

4

mLeftAnimation=newRotateAnimation(360.0f,0.0f,

Animation.RELATIVE_TO_SELF,0.5f,

Animation.RELATIVE_TO_SELF,0.5f);

mLeftAnimation.setDuration(2000);

代码实现

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.animation.Animation;

importandroid.view.animation.AnimationUtils;

importandroid.widget.Button;

importandroid.widget.ImageView;

publicclassRotateActivityextendsActivity{

/**向左旋转动画按钮**/

ButtonmButton0=null;

/**向右旋转动画按钮**/

ButtonmButton1=null;

/**显示动画的ImageView**/

ImageViewmImageView=null;

/**向左旋转动画**/

AnimationmLeftAnimation=null;

/**向右旋转动画**/

AnimationmRightAnimation=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.retate);

/**拿到ImageView对象**/

mImageView=(ImageView)findViewById(R.id.imageView);

/**加载向左与向右旋转动画**/

mLeftAnimation=AnimationUtils.loadAnimation(this,R.anim.retateleft);

mRightAnimation=AnimationUtils.loadAnimation(this,R.anim.retateright);

mButton0=(Button)findViewById(R.id.button0);

mButton0.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewarg0){

/**播放向左旋转动画**/

mImageView.startAnimation(mLeftAnimation);

}

});

mButton1=(Button)findViewById(R.id.button1);

mButton1.setOnClickListener(newOnClickListener(){

@Override

publicvoidonClick(Viewarg0){

/**播放向右旋转动画**/

mImageView.startAnimation(mRightAnimation);

}

});

}

}

3.Translate移动动画

标签为移动节点

android:repeatCount=”infinite” 设置动画为循环播放,这里可以写具体的int数值,设置动画播放几次,但是它记录次数是从0开始数的,比如这里设置为2 那么动画从0开始数数0 、1、 2 、实际上是播放了3次。

剩下的几个标签上面已经介绍过了。

这个动画布局设置动画从左到右(0.0),从上到下(320,480)做匀速移动。

C#

1

2

3

4

5

6

7

8

9

android:fromXDelta="0"

android:toXDelta="320"

android:fromYDelta="0"

android:toYDelta="480"

android:duration="2000"

android:repeatCount="infinite"

/>

在代码中加载动画

C#

1

2

mAnimation=newTranslateAnimation(0,320,0,480);

mAnimation.setDuration(2000);

代码实现

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.animation.Animation;

importandroid.view.animation.AnimationUtils;

importandroid.widget.ImageView;

publicclassTranslateActivityextendsActivity{

/**显示动画的ImageView**/

ImageViewmImageView=null;

/**移动动画**/

AnimationmAnimation=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.translate);

/**拿到ImageView对象**/

mImageView=(ImageView)findViewById(R.id.imageView);

/**加载移动动画**/

mAnimation=AnimationUtils.loadAnimation(this,R.anim.translate);

/**播放移动动画**/

mImageView.startAnimation(mAnimation);

}

}

4 .Alpha:透明渐变动画

标签为alpha透明度节点

android:fromAlpha=”1.0″ 设置动画起始透明度为1.0 表示完全不透明

android:toAlpha=”0.0″设置动画结束透明度为0.0 表示完全透明

也就是说alpha的取值范围为0.0 – 1.0 之间

这个动画布局设置动画从完全不透明渐变到完全透明。

C#

1

2

3

4

5

6

7

android:fromAlpha="1.0"

android:toAlpha="0.0"

android:repeatCount="infinite"

android:duration="2000">

在代码中加载动画

C#

1

2

mAnimation=newAlphaAnimation(1.0f,0.0f);

mAnimation.setDuration(2000);

代码实现

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.animation.Animation;

importandroid.view.animation.AnimationUtils;

importandroid.widget.ImageView;

publicclassAlphaActivityextendsActivity{

/**显示动画的ImageView**/

ImageViewmImageView=null;

/**透明动画**/

AnimationmAnimation=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.translate);

/**拿到ImageView对象**/

mImageView=(ImageView)findViewById(R.id.imageView);

/**加载透明动画**/

mAnimation=AnimationUtils.loadAnimation(this,R.anim.alpha);

/**播放透明动画**/

mImageView.startAnimation(mAnimation);

}

}

5.综合动画

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

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

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

android:interpolator="@android:anim/accelerate_interpolator"

android:fromDegrees="+360"

android:toDegrees="0"

android:pivotX="50%"

android:pivotY="50%"

android:duration="2000"

android:repeatCount="infinite"

/>

android:toAlpha="0.0"

android:repeatCount="infinite"

android:duration="2000">

android:fromXDelta="0"

android:toXDelta="320"

android:fromYDelta="0"

android:toYDelta="480"

android:duration="2000"

android:repeatCount="infinite"

/>

代码实现

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.animation.Animation;

importandroid.view.animation.AnimationUtils;

importandroid.widget.ImageView;

publicclassAllActivityextendsActivity{

/**显示动画的ImageView**/

ImageViewmImageView=null;

/**综合动画**/

AnimationmAnimation=null;

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.translate);

/**拿到ImageView对象**/

mImageView=(ImageView)findViewById(R.id.imageView);

/**加载综合动画**/

mAnimation=AnimationUtils.loadAnimation(this,R.anim.all);

/**播放综合动画**/

mImageView.startAnimation(mAnimation);

}

}

言归正传,总的来说这章内容还是比较简单的。老规矩每篇文章都会附带源代码,最后如果你还是觉得我写的不够详细 看的不够爽 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习雨松MOMO希望可以和大家一起进步。

最后编辑:2012-08-08作者:雨松MOMO

专注移动互联网,Unity3D游戏开发

捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

android 左移动画_Android研究院之游戏开发Tween动画的实现(十九)相关推荐

  1. unity重定向_unity3D游戏开发之动画混合与动画重定向

    Unity3D 游戏开发之动画混合与动画重定向 动画混合 状态机之中的状态不仅可以是单个剪辑, 也可以是一个混合树. 构建和编辑 复杂的状态机和混合树,以便完全控制的角色如何运动. Unity 编辑器 ...

  2. 【Unity游戏开发】动画系统(二)2D动画

    文章目录 动画系统之2D动画 Unity的动画 2d动画 实例 准备工作 开始简单的动画 结语 动画系统之2D动画 2d动画其实就是图片的转换,每帧转换实现2d的动态效果其实这也是3d动画的实现原理, ...

  3. 【Unity游戏开发】动画系统(三)按钮动画

    文章目录 动画系统之按钮动画 1. 按钮Botton 2. 创建一个Button按钮 3. 按钮动画 3.1 改变颜色 3.2 改变图片 3.3 改变动画 结语 动画系统之按钮动画 动画系统是一个比较 ...

  4. unity ui 补间动画_杭州Unity游戏开发培训内容有哪些?学习路线是如何规划的?...

    现在Unity游戏开发行业越来越受到欢迎,但是想要找到适合自己的课程和学习方法却有些困难.很多刚开始接触Unity游戏开发且没有基础的同学,不知道该从哪里开始学,也不知道要学习什么内容.该怎么开始Un ...

  5. Unity3D研究院之游戏开发中的人工智能AI

        很久没有写Unity3D相关的东西了,是因为这段时间我深陷一款IOS的软件开发中.不过以后我还是会回归Unity3D游戏开发的.什么语言都在用,生活与工作都挺给力的嚯嚯.今天还是打开了久违的U ...

  6. Android开发笔记(一百二十九)使用变换图形

    裁剪图形ClipDrawable ClipDrawable可设置图形的裁剪幅度,它的构造函数除了指定来源图形之外,还可以指定图形的裁剪方式(从开始裁剪还是从中间裁剪还是从末尾裁剪),以及裁剪方向(水平 ...

  7. Android开发笔记(一百三十九)可定制可滑动的标签栏

    App在页面底部展现标签栏导航的效果,有多种实现方式,包括TabActivity方式.ActivityGroup方式.FragmentActivity方式等等,具体的实现方案参见之前的博文< A ...

  8. 游戏开发中的人工智能(十四):神经网络

    接上文 游戏开发中的人工智能(十三):不确定状态下的决策:贝叶斯技术 本文内容:"神经网络"技术让游戏具有学习和适应的能力.事实上,从决策判断到预测玩家的行为,都可以应用.我们会详 ...

  9. 【软件开发底层知识修炼】十九 GDB调试从入门到熟练掌握超级详细实战教程学习目录

    本文记录之前写过的5篇关于GDB快速学习的文章,从第一篇开始学习到最后一篇,保证可以从入门GDB调试到熟练掌握GDB调试的技巧. 学习交流加 个人qq: 1126137994 个人微信: liu112 ...

最新文章

  1. python3基础知识点_入门Python3基础教程-知识点摘要
  2. SSL证书过期替换之踩坑总结
  3. C#利用ICSharpCode.SharpZipLib.dll压缩文件和解压文件
  4. ansys18安装以后打不开_Ubuntu18.04安装Python各个版本之后导致终端无法打开的解决办法...
  5. 超级计算数据中心设计要求(征求意见稿)
  6. 判断字典中指定key是否存在
  7. 信号的采样与插值重建(包含matlab)
  8. PHP工程师需要掌握的知识(转载)
  9. web服务器的简单实现——HTTP权威指南读书心得(七)
  10. qq接入和分享android,Android社交登录授权、分享SDK,支持微信、微博和QQ
  11. 拷贝构造函数和赋值构造函数的区别
  12. C# TextBox光标操作 光标定位 光标移动到最后
  13. 快手视频下载和转发工具
  14. 架构实战体会,结合《蔡学镛:架构的5个观察角度》
  15. 下列计算机程序设计语言中不属于高级语言,下列计算机程序设计语言中不属于高级语言的是()?...
  16. 打开我的计算机我的文档不见,我电脑桌面上的我的文档不见了,是什么原因造成我的文档不见了呢?是? 爱问知识人...
  17. 【无人机】【2017.12】基于AGENT的防御群建模分析
  18. C# F23.StringSimilarity库 字符串重复度、文本相似度、防抄袭
  19. C语言精练教程:连载中
  20. 0460-HDFS纠删码的机架感知

热门文章

  1. KDE vs GNOME: 设置,应用和小工具
  2. 如何将低版本的myeclipse改造成可以使用servlet3.0的神器
  3. PHP解析JSON数据的源代码
  4. org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60
  5. nginx忽略favicon.ico日志
  6. BigDecimal divide方法结果为无限小数问题
  7. 使用PowerDesigner创建数据库表
  8. linux shell 删除两个文件相同部分
  9. java struts2 表达式语言 ognl 简介
  10. ruby语言开源Web应用框架 Ruby on Rails 简介