安卓Animation类与xml制作动画
有时要对控件添加一点动画效果,在安卓中,动画效果也是一个类,也就是Animation类。把动画效果这个类弄好后,在与控件类关联到一起,就可以实现控件有一些动作特效这样的效果了。动画效果的定义,要在xml文件中。
效果图:
屏幕录制有些卡顿。不过影响不大。
以上的例子其实只是用了ImageView这个控件,然后不同的控件用了逐渐放大,还有位置平移这个动作。
下面说说怎么实现:
先实例化Animation类:
Animation myAnimation; //通过loadAnimation函数 把动画效果的xml文件加载进来 实例化动作类
myAnimation = AnimationUtils.loadAnimation(Selection.this, R.anim.my_anim);
实现xml文件(以下给出自带的4种特效):
alpha 渐变透明度动画效果
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="1000"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
<!--
透明度控制动画效果 alpha 渐变透明度动画效果
浮点型值:
fromAlpha 属性为动画起始时透明度
toAlpha 属性为动画结束时透明度
说明:
0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之间的float数据类型的数字 长整型值:
duration 属性为动画持续时间
说明:
时间以毫秒为单位 -->
</set>
scale 渐变尺寸伸缩动画效果
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > <scale
android:duration="1000"
android:fillAfter="false"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.4"
android:toYScale="1.4" /> </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:duration="2000"
android:fromXDelta="30"
android:fromYDelta="30"
android:toXDelta="-80"
android:toYDelta="300" />
<!--
translate 位置转移动画效果
整型值:
fromXDelta 属性为动画起始时 X坐标上的位置
toXDelta 属性为动画结束时 X坐标上的位置
fromYDelta 属性为动画起始时 Y坐标上的位置
toYDelta 属性为动画结束时 Y坐标上的位置
注意:
没有指定fromXType toXType fromYType toYType 时候,
默认是以自己为相对参照物
长整型值:
duration 属性为动画持续时间
说明: 时间以毫秒为单位
--> </set>
rotate 画面转移旋转动画效果
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > <rotate
android:duration="3000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="+350" />
<!--
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>
把Animation类和控件关联在一起
//控件开始动作
imgPic.startAnimation(myAnimation);
挺简单的吧,只要先实现xml文件,定义好动作的类型。再通过loadAnimation函数,用xml文件实例化Animaiton类。然后再把animaiton类和控件类关联在一起,控件就会开始有动作效果了。
不过要注意的是:animation类只能运行在主线程中!!!!!!
而且我发现一个问题,直接在代码中加入动作效果,不会自动执行。并且如果同时定义了多个有动作效果的控件的话,他们是会同时执行的,那有什么办法可以按顺序执行呢?
结合到UI还有主线程的问题,很自然就想到了Handler类。
我的解决办法是:进入activity后,开启一个新线程,这个线程按我们的需求,发消息给Handler类来执行动作,这样就可以执行了。
这是在onCreate里面的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //用于更新在主线程的UI
handler = new Handler() { @Override
public void handleMessage(Message msg) {
super.handleMessage(msg); switch (msg.arg1){ case 0: {
myAnimation = AnimationUtils.loadAnimation(Selection.this, R.anim.my_anim); imgPic.startAnimation(myAnimation); imgPic.setVisibility(View.VISIBLE);
}break; case 1: { myAnimation = AnimationUtils.loadAnimation(Selection.this, R.anim.studio_anim); LWGstudio.startAnimation(myAnimation); LWGstudio.setVisibility(View.VISIBLE);
}break; case 2: { backAnimation = AnimationUtils.loadAnimation(Selection.this, R.anim.back_anim); back.startAnimation(backAnimation); back.setVisibility(View.VISIBLE); }break; } }
}; //透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); imgPic = (ImageView)findViewById(R.id.ask); imgPic.setVisibility(View.INVISIBLE); back = (ImageView)findViewById(R.id.firstback); back.setVisibility(View.INVISIBLE); LWGstudio = (ImageView)findViewById(R.id.LWGstudio); LWGstudio.setVisibility(View.INVISIBLE); new Thread(new Runnable() {
@Override
public void run() { //进去隔一秒 出现askFood
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} Message ok = new Message();
ok.arg1 = 0;//区分更新什么UI
handler.sendMessage(ok); try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
} //第一个动作执行后,隔两秒执行LWGstudio出现的动作
ok = new Message();
ok.arg1 = 1;//区分更新什么UI
handler.sendMessage(ok); try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} //最后出现全屏变绿的动作
ok = new Message();
ok.arg1 = 2;//区分更新什么UI
handler.sendMessage(ok); }
}).start(); }
安卓Animation类与xml制作动画的更多相关文章
- 利用 CSS animation 和 CSS sprite 制作动画
CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...
- Python+Matplotlib制作动画
注: 在"实验设计与数据处理"的课后作业中,有一个数据可视化的作业,利用课程上学习的某种方法找一个二维函数的最大值,并将这个寻找的过程可视化.在作业里面利用了Matplotlib的 ...
- 制作动画效果:《CSS3 Animation》
在开始介绍Animation之前我们有必要先来了解一个特殊的东西,那就是"Keyframes",我们把他叫做“关键帧”,玩过flash的朋友可能对这个东西并不会陌生.下面我们就一起 ...
- 安卓app开发-05-Android xml布局详细介绍
安卓app开发-05-Android xml布局详细介绍 虽然说有 墨刀,墨客 这些图形化开发工具来做 Android 的界面设计,但是我们还是离不开要去学习做安卓原生app,学习 xml 布局还是必 ...
- Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)
学习内容: 1.了解Drawable类的作用 2.如何使用Drawable... 3.了解Tween动画... 4.如何创建和使用Tween动画... 1.Drawable类... Drawabl ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- Android使用XML做动画UI
在Android应用程序,使用动画效果,能带给用户更好的感觉.做动画可以通过XML或Android代码.本教程中,介绍使用XML来做动画.在这里,介绍基本的动画,如淡入,淡出,旋转等. 效果: htt ...
- css3制作动画性能问题
这篇文章主要讲的是怎样制作流畅动画,特别是针对移动端.在这里我首先介绍制作动画的几种方法的优缺点:接着会着重介绍用css3制作动画的注意事项. 1.用canvas.css3.jquery制作动画 Ca ...
- 前端制作动画的几种方式(css3,js)
制作动态的网页是是前端工程师必备的技能,很好的实现动画能够极大的提高用户体验,增强交互效果,那么动画有多少实现方式,一直对此有选择恐惧症的我就总结一下,以便在开发的时候选择最好的实现方式. 1.css ...
随机推荐
- Installing Forms Developer 10g and Reports 32-bit on 64-bit Windows versions(win7 or win10)
E-Business Suite 12.1 and 12.2 require Forms Developer 10g and Reports Designer 10g. Forms Develope ...
- mongodb倒排索引
这周主要都花时间搞mongodb上了,业务场景是上游产出几个城市的全量道路code值,每个城市的数据量大概在100w~200w之间,每条数据对应好几个feature,形如: { code: 0, fe ...
- 记录下httpclient 发送请求 服务端用@RequestBody 自动接收参数 报415
注解是post方式,那么检查以下内容:1. 你是否用了post请求2. 请求是否发送了数据3. 请求内容格式需要是 application/json .jquery 设置 contentType,-- ...
- h5使用模块模板,循环输出模块列表
博主使用freemarker为框架,不过不影响功能的说明,首先来看看成品效果图 然后是html [#import "/common/layout.ftl" as layout] [ ...
- linux简单介绍,helloworld,vi使用,用户管理
linux特点1.免费的.开源的2.支持多线程.多用户的3.安全性好4.对内存和文件管理优越 缺点:操作相对困难 linux最小只需要4m -> 嵌入式开发 我们使用 vm[虚拟机] 虚拟了一个 ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件
一个标准的规则文件的格式为已".drl"结尾的文本文件,因此可以通过记事本工具进行编辑.规则放置于规则文件当中,一个规则文件可以放置多条规则.在规则文件当中也可以存放用户自定义的函 ...
- [置顶]
kubernetes1.7新特性:新增StorageOS卷插件和Local持久存储
背景介绍 在Kubernetes中卷的作用在于提供给POD存储,这些存储可以挂载到POD中的容器上,进而给容器提供存储. 从图中可以看到结构体PodSpec有个属性是Volumes,通过这个Volum ...
- 类Flask实现前后端交互之代码聊天室
前言 框架 项目目录及各自功能 流程图 后端 server backend exector 前端 ajax 页面更新 演示 简易应答模式 代理模式处理外部请求 后台日志 总结 前言 这两天老是做梦,全 ...
- B. Clique Problem(贪心)
题目链接: B. Clique Problem time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- SqlServer 数据库负载均衡【转】
负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作.共同负载.均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服务器. 1. ...