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);
			}
		});
	}
}
时间: 2024-11-05 14:42:56

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

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

逐帧动画事实上非常easy,以下我们来看一个样例: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawa

Android中的动画

Android中的动画分为两大类:视图动画(View Animation)和属性动画(Property Animation).视图动画又分为帧动画(Frame Animation)和补间动画(Tween) 视图动画:只实现动画效果而不改变控件本身的属性            属性动画:以实现动画效果改变控件本身的属性 帧动画:实现帧动画,首先在drawable文件夹中放上动画资源(一个animation-list标签的xml文件,里面是一个个item), 然后在代码上,第一步:获取要显示动画效果

Android中时间戳的详细解释

Android中时间戳的详细解释: (1).定义: 时间戳就是根据当前系统时间生成的一组随机数字. (2).作用: 作为对数据唯一性的一种判断依据.避免了重复修改数据所带来的错误! (3).应用: (1).在银行account表中建立时间戳字段timestamp,设定为文本类型varchar. (2).当银行A读取account表中的存款字段时,同时也读取时间戳字段,比如123456. (3).当银行A修改完存款数值后,进行存盘操作时,将先前读取的时间戳123456与当时表中的时间戳进行一次对比

Android中Service的详细解释与使用

Android中Service的详细解释与使用: 概念: (1).Service可以说是一个在后台运行的Activity.它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了. (2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示. (3).它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用. 作用: (1).它用于处理一些不干扰用户使用的后台操作.如下载,网络获取.播放音乐,他可以通过INTENT来开启,同时也可以绑定到宿主对象(调用者例如A

android中Animation动画的连续播放与播放完毕后停留在最后的状态

我们做安卓应用的苦逼程序员们常常会需要用到Animation也就是动画.比如做地图功能的时候.我们在手机旋转时需要根据手机重力感应来调整地图的角度,让它上面的“北”一直指向地球的北面...好多人做动画的时候会遇到这么两个难题(我也曾经遇到过):1:动画执行完了一遍后又立刻恢复到了初始状态,或者动画只能不断循环动作.[问题:我想让动画动到某个位置或转到某个角度后停在那里,该如何做呢?]2:点击按钮一.动画从0度转到了10度,我再点击按钮二.需要动画从之前的10度位置再继续转到20度.再点击按钮三.

Android中WebView的详细解释

Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化WebView组件: A.在Activity中实例化WebView组件.eg: WebView webView = new WebView(this); B.调用WebView的loadUrl()方法,设置WevView要显示的网页.eg: 互联网用:webView.loadUrl("http://

android中drawable资源的解释及例子

文章中的内容参考Dev Guide中的Drawable Resources,英文好的朋友可以直接去读英文.总结这篇文章的目的是自己在使用drawable资源遇到一些问题跟大家分享下,同时整理下自己对drawable的理解. drawable资源共有10种,包括Bitmap文件.Nine-Path文件.Layer List.State List.Level list.Transition Drawable.Inset Drawable.Clip Drawable.Scale Drawable.Sh

android中的动画之变换动画(Tween Animation)

android中有四大动画,它们分别是:变换动画(Tween Animation),帧动画(frame Animation),布局动画(layout Animation),属性动画(Property Animation ).今天我在这里简单的说下变换动画. 首先我们来说下animation种的那些属性(这些都是动画中的通用属性) xml属性 java方法 解释 android:detachWallpaper setDetachWallpaper(booean) 是否在在壁纸上运行 android

初识android中的动画

动画效果可以大大提高界面的交互效果,因此,动画在移动开发中的应用场景较为普遍.掌握基本的动画效果在成熟的软件开发中不可或缺.除此之外,用户对于动画的接受程度远高于文字和图片,利用动画效果可以加深用户对于产品的印象.因此本文给出安卓设计中几种常见的动画效果. 基础知识 在介绍安卓中的动画效果之前,有必要介绍一下安卓中的图片处理机制.图片的特效包括图形的缩放.镜面.倒影.旋转.平移等.图片的特效处理方式是将原图的图形矩阵乘以一个特效矩阵,形成一个新的图形矩阵来实现的.矩阵Matrix 类,维护了一个