Android中的动画具体解释系列【2】——飞舞的蝴蝶
这一篇来使用逐帧动画和补间动画来实现一个小样例,首先我们来看看Android中的补间动画。
Android中使用Animation代表抽象的动画类,该类包含以下几个子类:
AlphaAnimation:透明改变动画。
ScaleAnimation:大小缩放动画。
TranslateAnimation:位移变化动画。
RotateAnimation:旋转动画。
我们以下使用位移动画和逐帧动画来实现这个小样例。先看看执行效果:
蝴蝶挥动翅膀的逐帧动画文件:
- <?xml version="1.0" encoding="utf-8"?>
- <!-- 定义动画循环播放 -->
- <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false">
- <item android:drawable="@drawable/butterfly_f01" android:duration="120" />
- <item android:drawable="@drawable/butterfly_f02" android:duration="120" />
- <item android:drawable="@drawable/butterfly_f03" android:duration="120" />
- <item android:drawable="@drawable/butterfly_f04" android:duration="120" />
- <item android:drawable="@drawable/butterfly_f05" android:duration="120" />
- <item android:drawable="@drawable/butterfly_f06" android:duration="120" />
- </animation-list>
界面布局文件:
- <?xml version="1.0" encoding="utf-8"?
- >
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@drawable/background"
- >
- <ImageView
- android:id="@+id/butterfly"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@anim/butteryfly"
- />
- </LinearLayout>
详细逻辑及位移动画:
- package com.example.butteryfly;
- import java.util.Timer;
- import java.util.TimerTask;
- import android.app.Activity;
- import android.graphics.drawable.AnimationDrawable;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.Display;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.animation.TranslateAnimation;
- import android.widget.ImageView;
- public class MainActivity extends Activity {
- private float curX = 0;
- private float curY = 30;
- private float nextX = 0;
- private float nextY = 0;
- private int windowW = 0;
- private int windowH = 0;
- private ImageView imageView;
- Handler handler = new Handler(){
- public void handleMessage(android.os.Message msg) {
- if(msg.what == 0x123){
- if(nextX > windowW || nextY > windowH){
- curX = nextX = 0;
- }else{
- nextX += 8;
- }
- nextY = curY + (float) (Math.random() * 20 - 10);
- TranslateAnimation anim = new TranslateAnimation(curX, nextX, curY, nextY);
- curX = nextX;
- curY = nextY;
- anim.setDuration(200);
- imageView.startAnimation(anim);
- }
- };
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- imageView = (ImageView) findViewById(R.id.butterfly);
- Display display = getWindowManager().getDefaultDisplay();
- windowW = display.getWidth();
- windowH = display.getHeight();
- final AnimationDrawable butterfly = (AnimationDrawable) imageView.getBackground();
- imageView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View arg0) {
- butterfly.start();
- new Timer().schedule(new TimerTask() {
- @Override
- public void run() {
- handler.sendEmptyMessage(0x123);
- }
- }, 0, 200);
- }
- });
- }
- }
Android中的动画具体解释系列【2】——飞舞的蝴蝶的更多相关文章
- Android中的动画具体解释系列【4】——Activity之间切换动画
前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自己定义动画.这一篇我们来看看怎样将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 ...
- Android中的动画具体解释系列【3】——自己定义动画研究
在上一篇中我们使用到了位移动画TranslateAnimation,以下我们先来看看TranslateAnimation是怎样实现Animation中的抽象方法的: /* * Copyright (C ...
- Android中的动画具体解释系列【1】——逐帧动画
逐帧动画事实上非常easy,以下我们来看一个样例: <?xml version="1.0" encoding="utf-8"?> <anima ...
- Android中的动画详解系列【4】——Activity之间切换动画
前面介绍了Android中的逐帧动画和补间动画,并实现了简单的自定义动画,这一篇我们来看看如何将Android中的动画运用到实际开发中的一个场景--Activity之间跳转动画. 一.定义动画资源 如 ...
- Android中的动画详解系列【2】——飞舞的蝴蝶
这一篇来使用逐帧动画和补间动画来实现一个小例子,首先我们来看看Android中的补间动画. Android中使用Animation代表抽象的动画类,该类包括下面几个子类: AlphaAnimation ...
- Android中的动画详解系列【3】——自定义动画研究
在上一篇中我们使用到了位移动画TranslateAnimation,下面我们先来看看TranslateAnimation是如何实现Animation中的抽象方法的: /* * Copyright (C ...
- Android中的动画详解系列【1】——逐帧动画
逐帧动画其实很简单,下面我们来看一个例子: <?xml version="1.0" encoding="utf-8"?> <animation ...
- Android中矢量动画
Android中矢量动画 Android中用<path> 标签来创建SVG,就好比控制着一支画笔,从一点到一点,动一条线. <path> 标签 支持一下属性 M = (Mx, ...
- Android中的动画
Android中的动画分为: 1.逐帧动画(Frame Animation): 把动画过程的每张静态图片都收集起来,然后由Android来控制依次显示这些静态图片,然后利用人眼”视觉暂留“的原理,给 ...
随机推荐
- TWaver可视化编辑器的前世今生(一)电信网管编辑器
走到今天,TWaver,一个致力于在技术领域(Technology)的弄潮儿(Waver),已经是第十二个年头.当年网吧的小网管都是IDC机房的运维人员了,TWaver也见证了这个时代的成长变迁. 萌 ...
- (8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)
rsautl是rsa的工具,相当于rsa.dgst的部分功能集合,可用于生成数字签名.验证数字签名.加密和解密文件. pkeyutl是非对称加密的通用工具,大体上和rsautl的用法差不多,所以此处只 ...
- 如何用纯 CSS 创作一种侧立图书的特效
效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/deVgRM 可交互视频教程 此视 ...
- 初识Pyhon
如果你的系统安装了这两个版本,请使用Python 3 如果没有安装Python,请安装Python 3 主要介绍在windows 64位操作系统上安装Python 3 1. 安装Python 首先,检 ...
- windows操作笔记
使用服务或其他windows应用的过程中,可能会遇到莫名其妙的错误,这时候从控制面板中,找到管理工具,打开事件查看器,或者通过计算机管理,找到日志中的记录,如果是代码错误,会给出提示信息,比如之前在写 ...
- OpenSSH高级功能之端口转发(Port Forwarding)
在RedHat提供的系统管理员指南中提到OpenSSH不止是一个安全shell,它还具有X11转发(X11 Forwarding)和端口转发(Port Forwarding)的功能.X11功能一般用于 ...
- python接口自动化-token参数关联登录(登录拉勾网)
前言 登录网站的时候,经常会遇到传token参数,token关联并不难,难的是找出服务器第一次返回token的值所在的位置,取出来后就可以动态关联了 登录拉勾网 1.先找到登录首页https://pa ...
- Leetcode 315.计算右侧小于当前元素的个数
计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元 ...
- mongodb客户端连接mongodb server
import pymongo import sys import os sys.path.append(os.path.split(os.path.realpath(__file__))[0]+&qu ...
- GO 语言周报【七月第 1 期】
TIOBE 七月排名 Go 进入前十 TIOBE 七月头条:Go 语言达到历史最高并进入前十.对于 Go 语言来说,这是一个里程碑时刻,我们可以更大胆地想象,它下一步的发展会达到怎样的高度.Go 是否 ...