Android中的动画详解系列【2】——飞舞的蝴蝶
16lz
2021-01-23
这一篇来使用逐帧动画和补间动画来实现一个小例子,首先我们来看看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"><ImageViewandroid: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);}};};@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);}});}}
更多相关文章
- 三款Android炫酷Loading动画组件推荐
- 《Android学习大纪事之--属性动画ObjectAnimator》
- [原创] 如何在android中实现swipe的手势功能及页面拖动动画
- android之ViewFlipper实现左右滑动动画效果
- android listview每个item定义动画呈现
- Android启动画面Splash
- Android创建逐帧动画的方式
- android 加载进度条动画
- android实现播放器反射性动画效果