android 左移动画_Android研究院之游戏开发Tween动画的实现(十九)
今天和大伙讨论一下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动画的实现(十九)相关推荐
- unity重定向_unity3D游戏开发之动画混合与动画重定向
Unity3D 游戏开发之动画混合与动画重定向 动画混合 状态机之中的状态不仅可以是单个剪辑, 也可以是一个混合树. 构建和编辑 复杂的状态机和混合树,以便完全控制的角色如何运动. Unity 编辑器 ...
- 【Unity游戏开发】动画系统(二)2D动画
文章目录 动画系统之2D动画 Unity的动画 2d动画 实例 准备工作 开始简单的动画 结语 动画系统之2D动画 2d动画其实就是图片的转换,每帧转换实现2d的动态效果其实这也是3d动画的实现原理, ...
- 【Unity游戏开发】动画系统(三)按钮动画
文章目录 动画系统之按钮动画 1. 按钮Botton 2. 创建一个Button按钮 3. 按钮动画 3.1 改变颜色 3.2 改变图片 3.3 改变动画 结语 动画系统之按钮动画 动画系统是一个比较 ...
- unity ui 补间动画_杭州Unity游戏开发培训内容有哪些?学习路线是如何规划的?...
现在Unity游戏开发行业越来越受到欢迎,但是想要找到适合自己的课程和学习方法却有些困难.很多刚开始接触Unity游戏开发且没有基础的同学,不知道该从哪里开始学,也不知道要学习什么内容.该怎么开始Un ...
- Unity3D研究院之游戏开发中的人工智能AI
很久没有写Unity3D相关的东西了,是因为这段时间我深陷一款IOS的软件开发中.不过以后我还是会回归Unity3D游戏开发的.什么语言都在用,生活与工作都挺给力的嚯嚯.今天还是打开了久违的U ...
- Android开发笔记(一百二十九)使用变换图形
裁剪图形ClipDrawable ClipDrawable可设置图形的裁剪幅度,它的构造函数除了指定来源图形之外,还可以指定图形的裁剪方式(从开始裁剪还是从中间裁剪还是从末尾裁剪),以及裁剪方向(水平 ...
- Android开发笔记(一百三十九)可定制可滑动的标签栏
App在页面底部展现标签栏导航的效果,有多种实现方式,包括TabActivity方式.ActivityGroup方式.FragmentActivity方式等等,具体的实现方案参见之前的博文< A ...
- 游戏开发中的人工智能(十四):神经网络
接上文 游戏开发中的人工智能(十三):不确定状态下的决策:贝叶斯技术 本文内容:"神经网络"技术让游戏具有学习和适应的能力.事实上,从决策判断到预测玩家的行为,都可以应用.我们会详 ...
- 【软件开发底层知识修炼】十九 GDB调试从入门到熟练掌握超级详细实战教程学习目录
本文记录之前写过的5篇关于GDB快速学习的文章,从第一篇开始学习到最后一篇,保证可以从入门GDB调试到熟练掌握GDB调试的技巧. 学习交流加 个人qq: 1126137994 个人微信: liu112 ...
最新文章
- python3基础知识点_入门Python3基础教程-知识点摘要
- SSL证书过期替换之踩坑总结
- C#利用ICSharpCode.SharpZipLib.dll压缩文件和解压文件
- ansys18安装以后打不开_Ubuntu18.04安装Python各个版本之后导致终端无法打开的解决办法...
- 超级计算数据中心设计要求(征求意见稿)
- 判断字典中指定key是否存在
- 信号的采样与插值重建(包含matlab)
- PHP工程师需要掌握的知识(转载)
- web服务器的简单实现——HTTP权威指南读书心得(七)
- qq接入和分享android,Android社交登录授权、分享SDK,支持微信、微博和QQ
- 拷贝构造函数和赋值构造函数的区别
- C# TextBox光标操作 光标定位 光标移动到最后
- 快手视频下载和转发工具
- 架构实战体会,结合《蔡学镛:架构的5个观察角度》
- 下列计算机程序设计语言中不属于高级语言,下列计算机程序设计语言中不属于高级语言的是()?...
- 打开我的计算机我的文档不见,我电脑桌面上的我的文档不见了,是什么原因造成我的文档不见了呢?是? 爱问知识人...
- 【无人机】【2017.12】基于AGENT的防御群建模分析
- C# F23.StringSimilarity库 字符串重复度、文本相似度、防抄袭
- C语言精练教程:连载中
- 0460-HDFS纠删码的机架感知
热门文章
- KDE vs GNOME: 设置,应用和小工具
- 如何将低版本的myeclipse改造成可以使用servlet3.0的神器
- PHP解析JSON数据的源代码
- org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60
- nginx忽略favicon.ico日志
- BigDecimal divide方法结果为无限小数问题
- 使用PowerDesigner创建数据库表
- linux shell 删除两个文件相同部分
- java struts2 表达式语言 ognl 简介
- ruby语言开源Web应用框架 Ruby on Rails 简介