Android动画的实现 上

在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动画的实现 上

时间: 2024-11-05 16:42:08

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

Android动画之三:Property Animation(上)

来完成这个Android动画系列,之前写了View Animation和Drawable Animation,接下来讲解三种动画中的最后一种,Property Animation,这也是Android动画中最强大的一部分,同时也是相对最复杂的一部分. Property Animation与Value Animation的区别 Property Animation翻译为属性动画,从Android3.0开始引入,相比与View Animation,官方更推荐开发者使用Property Animati

Android动画合集大全(上百种动画)

Android动画合集大全(上百种动画) 本项目是一套基于安卓的动画集合大全项目源码,包括但不限于各种程序Splash启动引导动画.高仿动画效果.ListView集合.自定义控件集合.页面滑动集合.折叠效果集合和一些比较精彩的动画例如:淘宝菜单.火车票出票动画.优酷导航菜单.图片3D浏览.扫雷效果和其他简单复杂动画,总共可以达到上百个,还在不断更新.再加上本人平时收集的源码demo库可以说是很强大的存在了项目源码下载地址和本人收集的源码库 下载地址:http://www.devstore.cn/

android动画具体解释六 XML中定义动画

动画View 属性动画系统同意动画View对象并提供非常多比view动画系统更高级的功能.view动画系统通过改变绘制方式来变换View对象,view动画是被view的容器所处理的,由于View本身没有要操控的属性.结果就是View被动画了.但View对象本身并没有变化. 在Android3.0中,新的属性和对应的getter和setter方法被增加以克服此缺点. 属性动画系统能够通过改变View对象的真实属性来动画Views. 并且.View也会在其属性改变时自己主动调用invalidate(

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

Android动画AnimationSet遇到的问题。

之前对Android动画这块一直是一知半解,知道个大概,并不会使用.刚好这几天没有太多的任务要做,可以梳理一下Android动画的一些知识.Android Animation的基础用法就不说了,这里主要记录下简单实用中遇到的问题. 1.XML中AnimationSet的某些属性有些问题. 主要就是android:repeatCount,android:repeatMode无效.这个问题据说是Google的工程师刻意为之.[参考:http://stackoverflow.com/questions

Android 动画详解

这次主要就介绍android动画,android动画目前分为三种形式,Tween Animation 这个只能应用于view对象上面的,Drawable Animation这个是帧动画,就是类似我们有一些列的图片依次播放图片时出现的动画,Property Animation 这个是属性动画,这也是在android3.0之后引进的动画,在手机的版本上是android4.0就可以使用这个动画,下面我们主要就是针对这三种情况进行介绍. Tween Animation 这个动画在Property Ani

【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation  动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 Animatio

Android动画学习——Tween Animation

目录 目录 Android动画学习 Tween Animation scale动画调节尺寸 alpha动画调节透明度 rotate动画旋转 translate动画平移 Android动画学习 android中动画分为3种: Tween Animation:通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生的动画效果,即是一种渐变动画. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画. Property Animation:属性动画,通过动态地改变对象的属性从而达