[Android] Android frame by frame animation动画显示
2011-09-05 16:07
656 查看
源代码
http://download.csdn.net/source/3576764
在看到编写简单的动画的时候,想到了android上也可以做到这一点,只是几个图片来回的切换。这种显示方式学名叫做:frame by frame animation,顺序播放事先做好的图像,跟电影类似;
效果:
res/anim/picture_animation.xml:
Java代码
<?xml version="1.0" encoding="utf-8"?>
<!-- 动画帧集合对象 -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!--动画帧对象 android:duration表示每帧动画显示的时间,放在drawable下的动画图片不能太大,否则会内存爆掉 -->
<item android:drawable="@drawable/camp_fire1" android:duration="83" />
<item android:drawable="@drawable/camp_fire2" android:duration="83" />
<item android:drawable="@drawable/camp_fire3" android:duration="83" />
<item android:drawable="@drawable/camp_fire4" android:duration="83" />
<item android:drawable="@drawable/camp_fire5" android:duration="83" />
<item android:drawable="@drawable/camp_fire6" android:duration="83" />
<item android:drawable="@drawable/camp_fire7" android:duration="83" />
<item android:drawable="@drawable/camp_fire8" android:duration="83" />
<item android:drawable="@drawable/camp_fire9" android:duration="83" />
<item android:drawable="@drawable/camp_fire10" android:duration="83" />
<item android:drawable="@drawable/camp_fire11" android:duration="83" />
<item android:drawable="@drawable/camp_fire12" android:duration="83" />
<item android:drawable="@drawable/camp_fire13" android:duration="83" />
<item android:drawable="@drawable/camp_fire14" android:duration="83" />
<item android:drawable="@drawable/camp_fire15" android:duration="83" />
<item android:drawable="@drawable/camp_fire16" android:duration="83" />
<item android:drawable="@drawable/camp_fire17" android:duration="83" />
</animation-list>
<?xml version="1.0" encoding="utf-8"?><!-- 动画帧集合对象 --><animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><!--动画帧对象 android:duration表示每帧动画显示的时间,放在drawable下的动画图片不能太大,否则会内存爆掉 --><item android:drawable="@drawable/camp_fire1"
android:duration="83" /><item android:drawable="@drawable/camp_fire2" android:duration="83" /><item android:drawable="@drawable/camp_fire3" android:duration="83" /><item android:drawable="@drawable/camp_fire4" android:duration="83" /><item android:drawable="@drawable/camp_fire5"
android:duration="83" /><item android:drawable="@drawable/camp_fire6" android:duration="83" /><item android:drawable="@drawable/camp_fire7" android:duration="83" /><item android:drawable="@drawable/camp_fire8" android:duration="83" /><item android:drawable="@drawable/camp_fire9"
android:duration="83" /><item android:drawable="@drawable/camp_fire10" android:duration="83" /><item android:drawable="@drawable/camp_fire11" android:duration="83" /><item android:drawable="@drawable/camp_fire12" android:duration="83" /><item android:drawable="@drawable/camp_fire13"
android:duration="83" /><item android:drawable="@drawable/camp_fire14" android:duration="83" /><item android:drawable="@drawable/camp_fire15" android:duration="83" /><item android:drawable="@drawable/camp_fire16" android:duration="83" /><item android:drawable="@drawable/camp_fire17"
android:duration="83" /></animation-list>
main.xml布局文件:
Java代码
<?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">
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="start" android:id="@+id/start" />
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/imageId"
android:src="@anim/picture_animation" />
</LinearLayout>
<?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"><Button android:layout_width="fill_parent"android:layout_height="wrap_content"
android:text="start" android:id="@+id/start" /><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content" android:id="@+id/imageId"android:src="@anim/picture_animation" /></LinearLayout>
IaiaiActivity.java类:
Java代码
package com.iaiai.activity;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
/**
*
* <p>
* Title: IaiaiActivity.java
* </p>
* <p>
* E-Mail: 176291935@qq.com
* </p>
* <p>
* QQ: 176291935
* </p>
* <p>
* Http: iaiai.iteye.com
* </p>
* <p>
* Create time: 2011-7-28
* </p>
*
* @author 丸子
* @version 0.0.1
*/
public class IaiaiActivity extends Activity {
private ImageView imageView;
private AnimationDrawable draw = null;
private Button start;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.imageView = (ImageView) findViewById(R.id.imageId);
this.draw = (AnimationDrawable) imageView.getDrawable();
this.start = (Button) findViewById(R.id.start);
this.start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (draw.isRunning()) {
draw.stop();
start.setText("start");
} else {
draw.stop();
draw.start();
start.setText("passe");
}
}
});
}
}
package com.iaiai.activity;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;/**
* * <p> * Title: IaiaiActivity.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-7-28 * </p> * * @author 丸子 * @version 0.0.1 */public class IaiaiActivity extends
Activity {private ImageView imageView; private AnimationDrawable draw = null;private Button start; @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.main);this.imageView = (ImageView) findViewById(R.id.imageId);this.draw
= (AnimationDrawable) imageView.getDrawable();this.start = (Button) findViewById(R.id.start);this.start.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { if (draw.isRunning()) { draw.stop();start.setText("start"); } else { draw.stop();
draw.start();start.setText("passe"); } } }); }}
注:代码运行的结果想必大家应该就知道了(图片按照顺序的播放一次),不过有一点需要强调的是:启动Frame Animation动画的代码rocketAnimation.start(); 不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。
XML属性:
下面,阅读Android SDK中对AnimationDrawable的介绍,有个简单的了解:
http://download.csdn.net/source/3576764
在看到编写简单的动画的时候,想到了android上也可以做到这一点,只是几个图片来回的切换。这种显示方式学名叫做:frame by frame animation,顺序播放事先做好的图像,跟电影类似;
效果:
res/anim/picture_animation.xml:
Java代码
<?xml version="1.0" encoding="utf-8"?>
<!-- 动画帧集合对象 -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!--动画帧对象 android:duration表示每帧动画显示的时间,放在drawable下的动画图片不能太大,否则会内存爆掉 -->
<item android:drawable="@drawable/camp_fire1" android:duration="83" />
<item android:drawable="@drawable/camp_fire2" android:duration="83" />
<item android:drawable="@drawable/camp_fire3" android:duration="83" />
<item android:drawable="@drawable/camp_fire4" android:duration="83" />
<item android:drawable="@drawable/camp_fire5" android:duration="83" />
<item android:drawable="@drawable/camp_fire6" android:duration="83" />
<item android:drawable="@drawable/camp_fire7" android:duration="83" />
<item android:drawable="@drawable/camp_fire8" android:duration="83" />
<item android:drawable="@drawable/camp_fire9" android:duration="83" />
<item android:drawable="@drawable/camp_fire10" android:duration="83" />
<item android:drawable="@drawable/camp_fire11" android:duration="83" />
<item android:drawable="@drawable/camp_fire12" android:duration="83" />
<item android:drawable="@drawable/camp_fire13" android:duration="83" />
<item android:drawable="@drawable/camp_fire14" android:duration="83" />
<item android:drawable="@drawable/camp_fire15" android:duration="83" />
<item android:drawable="@drawable/camp_fire16" android:duration="83" />
<item android:drawable="@drawable/camp_fire17" android:duration="83" />
</animation-list>
<?xml version="1.0" encoding="utf-8"?><!-- 动画帧集合对象 --><animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="false"><!--动画帧对象 android:duration表示每帧动画显示的时间,放在drawable下的动画图片不能太大,否则会内存爆掉 --><item android:drawable="@drawable/camp_fire1"
android:duration="83" /><item android:drawable="@drawable/camp_fire2" android:duration="83" /><item android:drawable="@drawable/camp_fire3" android:duration="83" /><item android:drawable="@drawable/camp_fire4" android:duration="83" /><item android:drawable="@drawable/camp_fire5"
android:duration="83" /><item android:drawable="@drawable/camp_fire6" android:duration="83" /><item android:drawable="@drawable/camp_fire7" android:duration="83" /><item android:drawable="@drawable/camp_fire8" android:duration="83" /><item android:drawable="@drawable/camp_fire9"
android:duration="83" /><item android:drawable="@drawable/camp_fire10" android:duration="83" /><item android:drawable="@drawable/camp_fire11" android:duration="83" /><item android:drawable="@drawable/camp_fire12" android:duration="83" /><item android:drawable="@drawable/camp_fire13"
android:duration="83" /><item android:drawable="@drawable/camp_fire14" android:duration="83" /><item android:drawable="@drawable/camp_fire15" android:duration="83" /><item android:drawable="@drawable/camp_fire16" android:duration="83" /><item android:drawable="@drawable/camp_fire17"
android:duration="83" /></animation-list>
main.xml布局文件:
Java代码
<?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">
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="start" android:id="@+id/start" />
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/imageId"
android:src="@anim/picture_animation" />
</LinearLayout>
<?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"><Button android:layout_width="fill_parent"android:layout_height="wrap_content"
android:text="start" android:id="@+id/start" /><ImageView android:layout_width="wrap_content"android:layout_height="wrap_content" android:id="@+id/imageId"android:src="@anim/picture_animation" /></LinearLayout>
IaiaiActivity.java类:
Java代码
package com.iaiai.activity;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
/**
*
* <p>
* Title: IaiaiActivity.java
* </p>
* <p>
* E-Mail: 176291935@qq.com
* </p>
* <p>
* QQ: 176291935
* </p>
* <p>
* Http: iaiai.iteye.com
* </p>
* <p>
* Create time: 2011-7-28
* </p>
*
* @author 丸子
* @version 0.0.1
*/
public class IaiaiActivity extends Activity {
private ImageView imageView;
private AnimationDrawable draw = null;
private Button start;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.imageView = (ImageView) findViewById(R.id.imageId);
this.draw = (AnimationDrawable) imageView.getDrawable();
this.start = (Button) findViewById(R.id.start);
this.start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (draw.isRunning()) {
draw.stop();
start.setText("start");
} else {
draw.stop();
draw.start();
start.setText("passe");
}
}
});
}
}
package com.iaiai.activity;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;/**
* * <p> * Title: IaiaiActivity.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-7-28 * </p> * * @author 丸子 * @version 0.0.1 */public class IaiaiActivity extends
Activity {private ImageView imageView; private AnimationDrawable draw = null;private Button start; @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.main);this.imageView = (ImageView) findViewById(R.id.imageId);this.draw
= (AnimationDrawable) imageView.getDrawable();this.start = (Button) findViewById(R.id.start);this.start.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) { if (draw.isRunning()) { draw.stop();start.setText("start"); } else { draw.stop();
draw.start();start.setText("passe"); } } }); }}
注:代码运行的结果想必大家应该就知道了(图片按照顺序的播放一次),不过有一点需要强调的是:启动Frame Animation动画的代码rocketAnimation.start(); 不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。
XML属性:
属性 | 说明 |
drawable | 当前帧引用的drawable资源 |
duration | 当前帧显示的时间(毫秒为单位) |
oneshot | 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。 |
variablePadding | If true, allows the drawable’s padding to change based on the current state that is selected. |
visible | 规定drawable的初始可见性,默认为flase; |
AnimationDrawable | |
获取、设置动画的属性 | |
int getDuration() | 获取动画的时长 |
int getNumberOfFrames() | 获取动画的帧数 |
boolean isOneShot()/Void setOneShot(boolean oneshot) | 获取oneshot属性/设置oneshot属性 |
void inflate(Resurce r,XmlPullParser p,AttributeSet attrs) | |
增加、获取帧动画 | |
Drawable getFrame(int index) | 获取某帧的Drawable资源 |
void addFrame(Drawable frame,int duration) | 为当前动画增加帧(资源,持续时长) |
动画控制 | |
void start() | 开始动画 |
void run() | 外界不能直接掉调用,使用start()替代 |
boolean isRunning() | 当前动画是否在运行 |
void stop() | 停止当前动画 |
相关文章推荐
- android frame by frame AnimationDrawable 实现动画效果
- Android Animation动画(Frame-By-Frame Animations 、Tween Animations 、Property Animation)的详解
- android动画——Frame by Frame Animation
- Android动画Animation之Frame实现类似电影的动画效果
- Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)
- Android之Frame Animation动画详解
- Java乔晓松-android中的帧动画FrameByFrame
- 详解Android动画之Frame Animation(转载自 liuhe688 博客)
- android--连贯动画frame-by-frame
- Android Animation动画实战(一): 从布局动画引入ListView滑动时,每一Item项的显示动画
- Android 动画之一 Drawable Animation —— 逐帧(Frame)动画
- android Frame-By-Frame Animations(一帧一帧地播放动画)的使用
- Android Animation动画实战(一): 从布局动画引入ListView滑动时,每一Item项的显示动画
- Android动画效果之Frame Animation(逐帧动画)
- android Frame-By-Frame Animations(一帧一帧地播放动画)的使用
- Android AnimationDrawable 帧动画多次切换隐藏显示时越来越快的处理
- Android动画效果之Frame Animation(逐帧动画)(二)(
- android中animation之Frame-By-Frame Animations
- Android 动画详解之Frame动画 (Drawable Animation)
- 史上最简单android动画之frame by frame(帧动画)