职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 344|回复: 1

玩转Android---2D图形及动画---Frame动画

[复制链接]
只学java 发表于 2011-8-22 09:57 | 显示全部楼层 |阅读模式
Frame动画其实就是逐帧动画,用法也比Tween动画简单,只需要创建一个AnimationDrawable对象来表示Frame动画,然后通过addFrame方法把每一帧要显示的内容加进去就行了,最后通过start方法就可以播放这个动画了,通过还可以使用
setOneShot()方法来设置动画是否重复播放。
再这里,还需要设置图片的所在位置,首先要在res/anim目录下创建一个xml配置文件,用于存放图片资源的索引,配置的是
一个以<animation-list>根原素和<item>子元素

下面用3种方式来实现这个Frame动画
第一种:直接继承Activity,使用<animation-list>列表来实现
main.xml
Java代码  
<?xml version="1.0" encoding="utf-8"?>   
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    androidrientation="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"  
    androidrientation="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>  

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    androidrientation="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"
           androidrientation="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
Java代码  
<?xml version="1.0" encoding="utf-8"?>   
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
    androidneshot="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>  

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        androidneshot="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
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();   
            }   
               
        });   
    }   
}  

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的图片




大小: 48 KB
Frames.zip (419.1 KB)
下载次数: 11
查看图片附件

hxy 发表于 2011-8-22 09:57 | 显示全部楼层
推荐链接
见证又一个准百万富翁的诞生!

20-30万急聘多名天才Java/MTA软件工程师
3G培训就业月薪平均7K+,不3K就业不花一分钱!

您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-6 02:25 , Processed in 0.144644 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表