Android三种常用动画分享(1)--帧动画

Android3.0(即API Level11)以前,Android仅支持2种动画:分别是Frame Animation(逐帧动画)和Tween Animation(补间动画),在3.0之后Android支持了一种新的动画系统,称为:Property Animation(属性动画)。

本编主要写的是第一种Frame Animation(逐帧动画)

这个很好理解,一帧帧的播放图片,利用人眼视觉残留原理,给我们带来动画的感觉。它的原理的GIF图片、电影播放原理一样。

在Android中提供了两种方式为AnimationDrawable添加帧:XML定义的资源文件和Java代码创建,后面再详细讲讲这两种添加帧的方式。


第一种在代码中设置帧动画

先介绍下代码中AnimationDrawable的常用方法

void start():开始播放逐帧动画。
void stop():停止播放逐帧动画。
void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间。
int getDuration(int i):得到指定index的帧的持续时间。
Drawable getFrame(int index):得到指定index的帧Drawable。
int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量。
boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放。
boolean isRunning():当前AnimationDrawable是否正在播放。
void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放
通过在java代码中创建AnimationDrawable对象,然后通过addFrame(Drawable frame, int duration)方法向动画添加帧,然后start()。。。



第二种在XML中设置帧动画

定义在XML文件中,我们可以放置在/res下的anim目录中(/res/anim/frame_animation.xml),文件名可以作为资源ID在代码中引用

例如:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true" ><!-- 设置是否只执行一次 -->
    <!-- 设置图片资源以及每一帧执行时间 -->
    <item android:drawable="@drawable/frame1" android:duration="300"/>
    <item android:drawable="@drawable/frame2" android:duration="300"/>
    <item android:drawable="@drawable/frame3" android:duration="300"/>
    <item android:drawable="@drawable/frame4" android:duration="300"/>
    <item android:drawable="@drawable/frame5" android:duration="300"/>
    <item android:drawable="@drawable/frame6" android:duration="300"/>
    <item android:drawable="@drawable/frame7" android:duration="300"/>
    <item android:drawable="@drawable/frame8" android:duration="300"/>
</animation-list>


下面看下代码:

MainActivity

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

	private Button btn_start, btn_stop;
	private ImageView iv_frame;
	private AnimationDrawable anim;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn_start = (Button) findViewById(R.id.btn_start);
		btn_stop = (Button) findViewById(R.id.btn_stop);
		iv_frame = (ImageView) findViewById(R.id.iv);
		setListener();
		initAnimationByXML();//通过XML来设置帧动画
		//initAnimationByCode();//代码方式设置帧动画
	}
	/**
	 * 通过XML来设置帧动画
	 */
	private void initAnimationByXML() {
		iv_frame.setBackgroundResource(R.anim.frame_animation);
		anim = (AnimationDrawable) iv_frame.getBackground();
	}
	/**
	 * 代码方式设置帧动画
	 */
	private void initAnimationByCode() {
		anim = new AnimationDrawable(); 
		anim.addFrame(getResources().getDrawable(R.drawable.frame1), 300);
		anim.addFrame(getResources().getDrawable(R.drawable.frame2), 300);
		anim.addFrame(getResources().getDrawable(R.drawable.frame3), 300);
		anim.addFrame(getResources().getDrawable(R.drawable.frame4), 300);
		anim.addFrame(getResources().getDrawable(R.drawable.frame5), 300);
		anim.addFrame(getResources().getDrawable(R.drawable.frame6), 300);
		anim.addFrame(getResources().getDrawable(R.drawable.frame7), 300);
		anim.addFrame(getResources().getDrawable(R.drawable.frame8), 300);
		anim.setOneShot(false); 
		iv_frame.setBackgroundDrawable(anim); //将动画设置为ImageView背景
	}
	private void setListener() {
		btn_start.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				anim.start();//开始动画
			}
		});
		btn_stop.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				anim.stop();//结束动画
			}
		});
	}

}

XML设置帧动画的代码frame_animation.xml上边已经贴出来了


布局文件activity_main.XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
	<LinearLayout 
	    android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
	    >
    <Button
        android:id="@+id/btn_start"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="start" />
    <Button
        android:id="@+id/btn_stop"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="stop" />
	</LinearLayout>
	<ImageView 
	    android:id="@+id/iv"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</LinearLayout>


源码地址:http://download.csdn.net/detail/linder_qzy/9458517

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值