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;@Overrideprotected 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() {@Overridepublic void onClick(View v) {anim.start();//开始动画}});btn_stop.setOnClickListener(new OnClickListener() {@Overridepublic 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

更多相关文章

  1. Android 中颜色对应的代码集合
  2. 《Android 编程权威指南》(Android Programming The Big Nerd Ran
  3. 美团,大众点评,悬浮窗功能代码
  4. android下使用Fragment实现左侧3级菜单+动画效果
  5. Android 第一行代码
  6. Android通过http协议数据交互的两种方式
  7. Android LayoutInflater的几种获得方式

随机推荐

  1. 收集android上开源的酷炫的交互动画和视
  2. android 程序截图功能
  3. Android检查网络是否连接
  4. 监测Android(安卓)Market是否被下过
  5. android之【本地通知Notification】
  6. Android的Layout及其Param
  7. Android(安卓)Fragment使用和切换 笔记
  8. android 图片自动切换
  9. Android雪花特效 - 自定义View
  10. android 自定义圆形的ImageView