在Android系统中也能经常见到动画,那么如何实现动画效果呢?本文就来为大家介绍动画的实现方式。

Android中动画的实现分两种方式,一种方式是补间动画Tween Animation,就是说你定义一个开始和结束,中间的部分由程序运算得到。另一种叫逐帧动画Frame Animation,就是说一帧一帧的连起来播放就变成了动画。有点Flash基础的同学理解起来会很容易。接下来我们一个一个学习。

一、补间动画Tween Animation

Android中实现补间动画的思路是这样的,

1、首先用XML定义一个动画效果

2、依据这个XML使用AnimationUtils工具类创建一个Animationd对象

3、调用View组件的startAnimation方法实现动画。

接下来我们用一个例子来看一下。

1、创建一个项目Lesson24_Animation,主Activity名字叫MainActivity.java

2、在res目录下创建一个anim目录,在目录下创建下面五个动画定义文件,需要注意的是这5个文件在是2.2下调试通过的,网上很多文档的xml是无法通过IDE的检查的,可能是新版本检查更严格了。

alpha_animation.xml

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>

composite_animation.xml

XML/HTML代码

rotate_animation.xml

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>

scale_animation.xml

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>

translate_animation.xml

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>

3、MainActivity.java的内容如下:

Java代码
  1. package android.basic.lesson24;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.view.animation.Animation;
  7. import android.view.animation.AnimationUtils;
  8. import android.widget.ImageButton;
  9. public class MainAnimation extends Activity {
  10. /** Called when the activity is first created. */
  11. @Override
  12. public void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. //定义UI组件
  16. final ImageButton ib1 = (ImageButton) findViewById(R.id.ImageButton01);
  17. final ImageButton ib2 = (ImageButton) findViewById(R.id.ImageButton02);
  18. final ImageButton ib3 = (ImageButton) findViewById(R.id.ImageButton03);
  19. final ImageButton ib4 = (ImageButton) findViewById(R.id.ImageButton04);
  20. final ImageButton ib5 = (ImageButton) findViewById(R.id.ImageButton05);
  21. //定义监听器
  22. OnClickListener ocl = new OnClickListener() {
  23. @Override
  24. public void onClick(View v) {
  25. switch (v.getId()) {
  26. case R.id.ImageButton01:
  27. //创建Animation对象
  28. Animation ani1 = AnimationUtils.loadAnimation(
  29. getApplicationContext(), R.anim.alpha_animation);
  30. //组件播放动画
  31. ib1.startAnimation(ani1);
  32. break;
  33. case R.id.ImageButton02:
  34. Animation ani2 = AnimationUtils.loadAnimation(
  35. getApplicationContext(), R.anim.scale_animation);
  36. ib2.startAnimation(ani2);
  37. break;
  38. case R.id.ImageButton03:
  39. Animation ani3 = AnimationUtils.loadAnimation(
  40. getApplicationContext(), R.anim.translate_animation);
  41. ib3.startAnimation(ani3);
  42. break;
  43. case R.id.ImageButton04:
  44. Animation ani4 = AnimationUtils.loadAnimation(
  45. getApplicationContext(), R.anim.rotate_animation);
  46. ib4.startAnimation(ani4);
  47. break;
  48. case R.id.ImageButton05:
  49. Animation ani5 = AnimationUtils.loadAnimation(
  50. getApplicationContext(), R.anim.composite_animation);
  51. ib5.startAnimation(ani5);
  52. break;
  53. }
  54. }
  55. };
  56. //绑定监听器
  57. ib1.setOnClickListener(ocl);
  58. ib2.setOnClickListener(ocl);
  59. ib3.setOnClickListener(ocl);
  60. ib4.setOnClickListener(ocl);
  61. ib5.setOnClickListener(ocl);
  62. }
  63. }

4、运行程序,查看结果。

原始图:

点击第一个按钮的透明度变化效果:

点击第二个按钮的缩放效果,这里看到的是两个缩放效果同时作用叠加的效果。也就是说默认情况下效果是同时发生的,而不是先后执行的,除非你使用 startoffset属性指定。同学们看这一讲最重要的还是自己练习来体会。

点击第三个按钮的位移效果,这个例子里我们可以清楚看到android:startOffset=”2000″的作用,数独按钮前2秒向右移了300像素,后2秒又回到原处,注意第二个translate中的负值参数,它清晰的告诉我们位移数据是相对自身当时位置的。

点击第四个按钮的旋转效果,负的度数表示逆时针旋转。

点击第五个按钮的复合动画效果,这个效果的代码我是直接粘贴的官方帮助文档里的代码,看着效果还不赖^_^

二、逐帧动画

我们知道,Android是不支持Gif动画的,也不建议使用Gif动画,比较不幸的是到Android 2.2版本为止也不支持APNG这种png动画格式,所以我们制作只能用多张png图片逐帧播放的方式来实现动画效果。下面我们用一个例子来学习一下逐帧动画。

1、新建一个项目Lesson24_FrameAnimation ,主Acitivy名字叫 MainFrameAnimation.java。

2、将下图中的每个小图片分开,即25张小图片,拷贝到res/drawable目录下。

3、在res/anim目录下,新建一个文件 firefox_animation.xml 内容如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>

4、在res/layout/main.xml中写入如下内容:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <BUTTON type=submit>
  3. </BUTTON>
  4. <BUTTON type=submit>
  5. </BUTTON>

5、在MainFrameAnimation.javaz中的内容如下:

Java代码
  1. package android.basic.lesson24;
  2. import android.app.Activity;
  3. import android.graphics.drawable.AnimationDrawable;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.ImageView;
  9. public class MainFrameAnimaton extends Activity {
  10. /** Called when the activity is first created. */
  11. @Override
  12. public void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. // 定义UI组件
  16. Button b1 = (Button) findViewById(R.id.Button01);
  17. Button b2 = (Button) findViewById(R.id.Button02);
  18. final ImageView iv = (ImageView) findViewById(R.id.ImageView01);
  19. // 定义点击监听器
  20. OnClickListener ocl = new OnClickListener() {
  21. @Override
  22. public void onClick(View v) {
  23. // 定义"动画可画"对象,我起的名字,你看着不顺眼就当不存在^_^
  24. AnimationDrawable ad = (AnimationDrawable) iv.getBackground();
  25. switch (v.getId()) {
  26. case R.id.Button01:
  27. //调用动画可画对象的开始播放方法
  28. ad.start();
  29. break;
  30. case R.id.Button02:
  31. //调用动画可画对象的停止播放方法
  32. ad.stop();
  33. break;
  34. }
  35. }
  36. };
  37. //绑定监听器
  38. b1.setOnClickListener(ocl);
  39. b2.setOnClickListener(ocl);
  40. }
  41. }

6、运行程序,查看效果:

换个背景再来一张,可以看到png动画的透明就是不一般^_^

顺便提一下,我的这些可爱的小狐狸图标,是在APNG这个项目中找到的,感兴趣的朋友去搜搜APNG吧。

Android动画的实现 上的更多相关文章

  1. Android属性动画完全解析(上)

    Android属性动画完全解析(上) 转载:http://blog.csdn.net/guolin_blog/article/details/43536355 在手机上去实现一些动画效果算是件比较炫酷 ...

  2. Android动画效果之自定义ViewGroup添加布局动画

    前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...

  3. Android动画效果之Property Animation进阶(属性动画)

    前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...

  4. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  5. Android动画效果之Frame Animation(逐帧动画)

    前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...

  6. Android动画学习(二)——Tween Animation

    前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...

  7. Android动画的理解

    基础知识 在我们开始讲Android动画这个知识点之前,我们了解下相应的基础知识点. Shape篇 一般用Shape定义的XML文件是存放在Drawable目录下,广泛应用于在Button.TextV ...

  8. Android动画之淡入淡出

    为了更好的说明Android动画的淡入淡出效果,这里以一个场景为例: 界面上有两个View 控件,两个View交替显示,当一个View淡入显示,另一个View淡出不可见. 我们把当前要显示的View叫 ...

  9. Android动画之Tween动画实战

    Android动画分为Tween动画和Frame动画,上一节通过一个实例介绍了Frame动画,本节将介绍Tween动画.Tween可以把对象进行缩小.放大.旋转和渐变等操作.     Tween动画有 ...

随机推荐

  1. msssql 用numberic(38)替代int去解决int不够的问题

    发现ms sql server的问题int(-2^31 ~ 2 ^ 31 -1)与程序中的UINT有时会对不上的时候, 发现如果用numberic(32)来做判断好像解决, 暂时就现在的插入操作来看, ...

  2. wifi详解(三)

    1        WLAN驱动结构介绍 1.1      SDIO驱动 在drivers/mmc下面是mmc卡,SD卡和SDIO卡驱动部分,其中包括host驱动,card驱动和core部分,由于网络接 ...

  3. HDU 3333-Turing Tree(BIT好题)

    题意: 给你n个数的序列a,q个询问,每个询问给l,r,求在下标i在[l,r]的区间内不含重复数的和 分析: 这类题目觉得很好,很练思维,觉得不太好做. 用BIT维护和,我们可以从前向后扫一遍序列,当 ...

  4. Cadence关闭StartPage的方法

    Cadence 16.5开始,打开原理图工具 Orcad Capture 时,总是会弹出startpage 页面,关闭它的方法: 解决方法如下: (1) View---Toolbar----Comma ...

  5. 《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》

    注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D基础操作   第一课<G3D编辑器初探> G3D编辑器介绍,依托于一个复杂场景,讲解了场景视图及其基本操作,属性面板和工具栏的 ...

  6. tomcat server获取用户的请求地址

    当用户 与 tomcat之间 用 nginx做跳转时, HttpServletRequest 中的 getRemoteHost()方法获取到的只是nginx的地址,而不能拿到用户真正的请求地址 解决方 ...

  7. ffmpeg 研究

    ffmpeg -codecs | grep mp3 可以查看ffmpeg是否把mp3编解码模块编译进去了. libmp3lame is the mp3 encoder for ffmpeg. It n ...

  8. struts2+Hibernate4+spring3+EasyUI环境搭建之一:准备工作

    SSHE环境搭建第一步:安装软件(经验:安装软件路径最好不要有空格.括弧.中文等特殊符号)1.Jdk72.tomcat73.maven34.MyEclipse10.7 破解及优化设置(设置本地安装jd ...

  9. iOS学习之自动布局

    Autolayout: 最重要的两个概念: 约束:对控件位置和大小的限定条件 参照:对控件设置的约束是相对于哪一个视图而言的 自动布局的核心计算公式: obj1.property1 =(obj2.pr ...

  10. poj3041

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12162   Accepted: 6620 Descri ...