有时要对控件添加一点动画效果,在安卓中,动画效果也是一个类,也就是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制作动画的更多相关文章

  1. 利用 CSS animation 和 CSS sprite 制作动画

    CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...

  2. Python+Matplotlib制作动画

    注: 在"实验设计与数据处理"的课后作业中,有一个数据可视化的作业,利用课程上学习的某种方法找一个二维函数的最大值,并将这个寻找的过程可视化.在作业里面利用了Matplotlib的 ...

  3. 制作动画效果:《CSS3 Animation》

    在开始介绍Animation之前我们有必要先来了解一个特殊的东西,那就是"Keyframes",我们把他叫做“关键帧”,玩过flash的朋友可能对这个东西并不会陌生.下面我们就一起 ...

  4. 安卓app开发-05-Android xml布局详细介绍

    安卓app开发-05-Android xml布局详细介绍 虽然说有 墨刀,墨客 这些图形化开发工具来做 Android 的界面设计,但是我们还是离不开要去学习做安卓原生app,学习 xml 布局还是必 ...

  5. Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)

    学习内容: 1.了解Drawable类的作用 2.如何使用Drawable... 3.了解Tween动画... 4.如何创建和使用Tween动画... 1.Drawable类...   Drawabl ...

  6. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

  7. Android使用XML做动画UI

    在Android应用程序,使用动画效果,能带给用户更好的感觉.做动画可以通过XML或Android代码.本教程中,介绍使用XML来做动画.在这里,介绍基本的动画,如淡入,淡出,旋转等. 效果: htt ...

  8. css3制作动画性能问题

    这篇文章主要讲的是怎样制作流畅动画,特别是针对移动端.在这里我首先介绍制作动画的几种方法的优缺点:接着会着重介绍用css3制作动画的注意事项. 1.用canvas.css3.jquery制作动画 Ca ...

  9. 前端制作动画的几种方式(css3,js)

    制作动态的网页是是前端工程师必备的技能,很好的实现动画能够极大的提高用户体验,增强交互效果,那么动画有多少实现方式,一直对此有选择恐惧症的我就总结一下,以便在开发的时候选择最好的实现方式. 1.css ...

随机推荐

  1. IOS-导航路线

    1.可以将需要导航的位置丢给系统自带的APP进行导航 2.发送网络请求到公司服务器获取导航数据, 然后自己手动绘制导航 3.利用三方SDK实现导航(百度) >当点击开始导航时获取用户输入的起点和 ...

  2. 通过IndexOf获得DataRow在DataTable中的行号

    Row = dt.Rows.IndexOf(dr);

  3. poj1274

    题解: 二分图匹配 裸题匈牙利匹配 代码: #include<cstdio> #include<cstring> #include<cmath> #include& ...

  4. 一次完整的HTTP请求

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1:建立TCP连接,TCP的三次握手 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服 ...

  5. Java并发编程之CyclicBarrier

    一.场景描述 有四个游戏玩家玩游戏,游戏有三个关卡,每个关卡必须要所有玩家都到达后才能允许通过.其实这个场景里的玩家中如果有玩家A先到了关卡1,他必须等到其他所有玩家都到达关卡1时才能通过,也就是说线 ...

  6. Keras GRU 文字识别

    GRU(Gated Recurrent Unit)是LSTM的一个变体,也能克服RNN无法很好处理远距离依赖的问题. GRU的结构跟LSTM类似,不过增加了让三个门层也接收细胞状态的输入,是常用的LS ...

  7. 多进程(了解):守护进程,互斥锁,信号量,进程Queue与线程queue(生产者与消费者模型)

    一.守护进程 主进程创建守护进程,守护进程的主要的特征为:①守护进程会在主进程代码执行结束时立即终止:②守护进程内无法继续再开子进程,否则会抛出异常. 实例: from multiprocessing ...

  8. 智能电视软件安装(WIFI上网)

    智能电视软件上网(电视可连接无线网的称之为:智能电视) 1.安装当贝市场 链接:http://www.dangbei.com/ 2.安装电视家浏览器 链接:http://www.tvapk.net/f ...

  9. request.getDispatcher().forward(request,response)和response.sendRedirect()的区别

    在进行web开发时,跳转是最常见的,今天在这里来学习下2种跳转: 第一种是request.getDispatcher().forward(request,response): 1.属于转发,也是服务器 ...

  10. 【精品分享二】ASP.NET MVC系列精品图书高清PDF下载

    更多图书请关注:第一教育云电子书平台  http://book.1eduyun.com/ 注:本专题提供的所有的电子书下载资源均系收集于百度云,本网站(http://book.1eduyun.com/ ...