原址:http://hualang.iteye.com/category/143855
Frame动画其实就是逐帧动画,用法也比Tween动画简单,只需要创建一个AnimationDrawable对象来表示Frame动画,然后通过addFrame方法把每一帧要显示的内容加进去就行了,最后通过start方法就可以播放这个动画了,通过还可以使用
setOneShot()方法来设置动画是否重复播放。
再这里,还需要设置图片的所在位置,首先要在res/anim目录下创建一个xml配置文件,用于存放图片资源的索引,配置的是
一个以<animation-list>根原素和<item>子元素
下面用3种方式来实现这个Frame动画
第一种:直接继承Activity,使用<animation-list>列表来实现
main.xml
- <?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"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="逐帧动画"
- />
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <Button
- android:id="@+id/start"
- android:layout_width="150dp"
- android:layout_height="wrap_content"
- android:text="开始播放动画"/>
- <Button
- android:id="@+id/stop"
- android:layout_width="150dp"
- android:layout_height="wrap_content"
- android:text="停止播放动画"/>
- </LinearLayout>
- <ImageView
- android:id="@+id/imgview"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:background="@anim/birthday"
- />
- </LinearLayout>
res/anim/birthday.xml
- <?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/birthday1" android:duration="300"/>
- <item android:drawable="@drawable/birthday2" android:duration="300"/>
- <item android:drawable="@drawable/birthday3" android:duration="300"/>
- <item android:drawable="@drawable/birthday4" android:duration="300"/>
- <item android:drawable="@drawable/birthday5" android:duration="300"/>
- <item android:drawable="@drawable/birthday6" android:duration="300"/>
- <item android:drawable="@drawable/birthday7" android:duration="300"/>
- <item android:drawable="@drawable/birthday8" android:duration="300"/>
- <item android:drawable="@drawable/birthday9" android:duration="300"/>
- </animation-list>
FramesActivity.java
- package com.loulijun.frames;
- import android.app.Activity;
- import android.graphics.drawable.AnimationDrawable;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
- public class FramesActivity extends Activity {
- private AnimationDrawable frameanim;
- private Button start,stop;
- private ImageView img;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- img = (ImageView)findViewById(R.id.imgview);
- start = (Button)findViewById(R.id.start);
- stop = (Button)findViewById(R.id.stop);
- //获得背景色,并转换为AnimationDrawable对象
- frameanim = (AnimationDrawable)img.getBackground();
- //为按钮添加监听事件
- start.setOnClickListener(new Button.OnClickListener()
- {
- @Override
- public void onClick(View v) {
- //开始动画
- frameanim.start();
- }
- });
- stop.setOnClickListener(new Button.OnClickListener()
- {
- @Override
- public void onClick(View v) {
- // 停止动画
- frameanim.stop();
- }
- });
- }
- }
效果如下:具体自己下载运行,我只截了一张图,没有做成gif的图片