这一篇来使用逐帧动画和补间动画来实现一个小样例,首先我们来看看Android中的补间动画。

Android中使用Animation代表抽象的动画类,该类包含以下几个子类:

AlphaAnimation:透明改变动画。

ScaleAnimation:大小缩放动画。

TranslateAnimation:位移变化动画。

RotateAnimation:旋转动画。

我们以下使用位移动画和逐帧动画来实现这个小样例。先看看执行效果:

蝴蝶挥动翅膀的逐帧动画文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- 定义动画循环播放 -->
  3. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:oneshot="false">
  5. <item android:drawable="@drawable/butterfly_f01" android:duration="120" />
  6. <item android:drawable="@drawable/butterfly_f02" android:duration="120" />
  7. <item android:drawable="@drawable/butterfly_f03" android:duration="120" />
  8. <item android:drawable="@drawable/butterfly_f04" android:duration="120" />
  9. <item android:drawable="@drawable/butterfly_f05" android:duration="120" />
  10. <item android:drawable="@drawable/butterfly_f06" android:duration="120" />
  11. </animation-list>

界面布局文件:

  1. <?xml version="1.0" encoding="utf-8"?
  2.  
  3. >
  4. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  5. android:orientation="vertical"
  6. android:layout_width="fill_parent"
  7. android:layout_height="fill_parent"
  8. android:background="@drawable/background"
  9. >
  10. <ImageView
  11. android:id="@+id/butterfly"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:background="@anim/butteryfly"
  15. />
  16. </LinearLayout>

详细逻辑及位移动画:

  1. package com.example.butteryfly;
  2.  
  3. import java.util.Timer;
  4. import java.util.TimerTask;
  5.  
  6. import android.app.Activity;
  7. import android.graphics.drawable.AnimationDrawable;
  8. import android.os.Bundle;
  9. import android.os.Handler;
  10. import android.view.Display;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.view.animation.TranslateAnimation;
  14. import android.widget.ImageView;
  15.  
  16. public class MainActivity extends Activity {
  17.  
  18. private float curX = 0;
  19. private float curY = 30;
  20.  
  21. private float nextX = 0;
  22. private float nextY = 0;
  23.  
  24. private int windowW = 0;
  25. private int windowH = 0;
  26.  
  27. private ImageView imageView;
  28.  
  29. Handler handler = new Handler(){
  30. public void handleMessage(android.os.Message msg) {
  31. if(msg.what == 0x123){
  32. if(nextX > windowW || nextY > windowH){
  33. curX = nextX = 0;
  34. }else{
  35. nextX += 8;
  36. }
  37.  
  38. nextY = curY + (float) (Math.random() * 20 - 10);
  39. TranslateAnimation anim = new TranslateAnimation(curX, nextX, curY, nextY);
  40. curX = nextX;
  41. curY = nextY;
  42. anim.setDuration(200);
  43. imageView.startAnimation(anim);
  44. }
  45. };
  46. };
  47. @Override
  48. protected void onCreate(Bundle savedInstanceState) {
  49. super.onCreate(savedInstanceState);
  50. setContentView(R.layout.activity_main);
  51.  
  52. imageView = (ImageView) findViewById(R.id.butterfly);
  53.  
  54. Display display = getWindowManager().getDefaultDisplay();
  55. windowW = display.getWidth();
  56. windowH = display.getHeight();
  57.  
  58. final AnimationDrawable butterfly = (AnimationDrawable) imageView.getBackground();
  59. imageView.setOnClickListener(new OnClickListener() {
  60.  
  61. @Override
  62. public void onClick(View arg0) {
  63. butterfly.start();
  64. new Timer().schedule(new TimerTask() {
  65.  
  66. @Override
  67. public void run() {
  68. handler.sendEmptyMessage(0x123);
  69. }
  70. }, 0, 200);
  71. }
  72. });
  73. }
  74. }

Android中的动画具体解释系列【2】——飞舞的蝴蝶的更多相关文章

  1. Android中的动画具体解释系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自己定义动画.这一篇我们来看看怎样将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 ...

  2. Android中的动画具体解释系列【3】——自己定义动画研究

    在上一篇中我们使用到了位移动画TranslateAnimation,以下我们先来看看TranslateAnimation是怎样实现Animation中的抽象方法的: /* * Copyright (C ...

  3. Android中的动画具体解释系列【1】——逐帧动画

    逐帧动画事实上非常easy,以下我们来看一个样例: <?xml version="1.0" encoding="utf-8"?> <anima ...

  4. Android中的动画详解系列【4】——Activity之间切换动画

    前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自定义动画,这一篇我们来看看如何将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 如 ...

  5. Android中的动画详解系列【2】——飞舞的蝴蝶

    这一篇来使用逐帧动画和补间动画来实现一个小例子,首先我们来看看Android中的补间动画. Android中使用Animation代表抽象的动画类,该类包括下面几个子类: AlphaAnimation ...

  6. Android中的动画详解系列【3】——自定义动画研究

    在上一篇中我们使用到了位移动画TranslateAnimation,下面我们先来看看TranslateAnimation是如何实现Animation中的抽象方法的: /* * Copyright (C ...

  7. Android中的动画详解系列【1】——逐帧动画

    逐帧动画其实很简单,下面我们来看一个例子: <?xml version="1.0" encoding="utf-8"?> <animation ...

  8. Android中矢量动画

    Android中矢量动画 Android中用<path> 标签来创建SVG,就好比控制着一支画笔,从一点到一点,动一条线. <path> 标签 支持一下属性 M = (Mx, ...

  9. Android中的动画

    Android中的动画分为: 1.逐帧动画(Frame Animation):  把动画过程的每张静态图片都收集起来,然后由Android来控制依次显示这些静态图片,然后利用人眼”视觉暂留“的原理,给 ...

随机推荐

  1. TWaver可视化编辑器的前世今生(一)电信网管编辑器

    走到今天,TWaver,一个致力于在技术领域(Technology)的弄潮儿(Waver),已经是第十二个年头.当年网吧的小网管都是IDC机房的运维人员了,TWaver也见证了这个时代的成长变迁. 萌 ...

  2. (8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)

    rsautl是rsa的工具,相当于rsa.dgst的部分功能集合,可用于生成数字签名.验证数字签名.加密和解密文件. pkeyutl是非对称加密的通用工具,大体上和rsautl的用法差不多,所以此处只 ...

  3. 如何用纯 CSS 创作一种侧立图书的特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/deVgRM 可交互视频教程 此视 ...

  4. 初识Pyhon

    如果你的系统安装了这两个版本,请使用Python 3 如果没有安装Python,请安装Python 3 主要介绍在windows 64位操作系统上安装Python 3 1. 安装Python 首先,检 ...

  5. windows操作笔记

    使用服务或其他windows应用的过程中,可能会遇到莫名其妙的错误,这时候从控制面板中,找到管理工具,打开事件查看器,或者通过计算机管理,找到日志中的记录,如果是代码错误,会给出提示信息,比如之前在写 ...

  6. OpenSSH高级功能之端口转发(Port Forwarding)

    在RedHat提供的系统管理员指南中提到OpenSSH不止是一个安全shell,它还具有X11转发(X11 Forwarding)和端口转发(Port Forwarding)的功能.X11功能一般用于 ...

  7. python接口自动化-token参数关联登录(登录拉勾网)

    前言 登录网站的时候,经常会遇到传token参数,token关联并不难,难的是找出服务器第一次返回token的值所在的位置,取出来后就可以动态关联了 登录拉勾网 1.先找到登录首页https://pa ...

  8. Leetcode 315.计算右侧小于当前元素的个数

    计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是  nums[i] 右侧小于 nums[i] 的元 ...

  9. mongodb客户端连接mongodb server

    import pymongo import sys import os sys.path.append(os.path.split(os.path.realpath(__file__))[0]+&qu ...

  10. GO 语言周报【七月第 1 期】

    TIOBE 七月排名 Go 进入前十 TIOBE 七月头条:Go 语言达到历史最高并进入前十.对于 Go 语言来说,这是一个里程碑时刻,我们可以更大胆地想象,它下一步的发展会达到怎样的高度.Go 是否 ...