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

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

AlphaAnimation:透明改变动画。

ScaleAnimation:大小缩放动画。

TranslateAnimation:位移变化动画。

RotateAnimation:旋转动画。

我们下面使用位移动画和逐帧动画来实现这个小例子,先看看运行效果:

Android中的动画详解系列【2】——飞舞的蝴蝶_第1张图片

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

<?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"><ImageViewandroid:id="@+id/butterfly"android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@anim/butteryfly"/></LinearLayout>
具体逻辑及位移动画:

Android中的动画详解系列【2】——飞舞的蝴蝶_第2张图片

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);}};};@Overrideprotected 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() {@Overridepublic void onClick(View arg0) {butterfly.start();new Timer().schedule(new TimerTask() {@Overridepublic void run() {handler.sendEmptyMessage(0x123);}}, 0, 200);}});}}




更多相关文章

  1. 三款Android炫酷Loading动画组件推荐
  2. 《Android学习大纪事之--属性动画ObjectAnimator》
  3. [原创] 如何在android中实现swipe的手势功能及页面拖动动画
  4. android之ViewFlipper实现左右滑动动画效果
  5. android listview每个item定义动画呈现
  6. Android启动画面Splash
  7. Android创建逐帧动画的方式
  8. android 加载进度条动画
  9. android实现播放器反射性动画效果

随机推荐

  1. Android(安卓)的OpenGL ES与EGL
  2. Android实现为GridView添加边框效果
  3. Android(安卓)NDK c调用java代码
  4. Android(安卓)- View Alpha值
  5. Android的Activity获取fragment和fragmen
  6. Android(安卓)全屏与沉浸式
  7. android与j2me移植之clipRect
  8. Android中Dialog的使用
  9. Android使用AudioRecord遇到的问题与解决
  10. Android通知