博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android一帧一帧的动画
阅读量:6091 次
发布时间:2019-06-20

本文共 2909 字,大约阅读时间需要 9 分钟。

我在网上找 Android动画的时候发现,很多都是我上一篇哪个样子的文章。很少有一帧一帧的动画。请大家不要忘记传统动画。
 
 
下面就给个具体的XML例子,来定义一帧一帧的动画:
上面的XML就定义了一个Frame Animation,其包含6帧动画,6帧动画中分别应用了drawable中的6张图片:ball1,ball2,.....ball6 每帧动画持续50毫秒。
然后我们将以上XML保存在res/anim/文件夹下,命名为simple_animation.xml,显示动画的代码:
  1. <?
    xml 
    version
    ="1.0" 
    encoding
    ="UTF-8"
    ?> 

    <
    LinearLayout 

    android:layout_width
    ="fill_parent" 

    android:layout_height
    ="fill_parent" 

    android:orientation
    ="vertical" 

    xmlns:android
    ="http://schemas.android.com/apk/res/android" 

    > 

    <
    ImageView    

        
    android:id
    ="@+id/imageView" 

        
    android:layout_width
    ="wrap_content" 

        
    android:layout_height
    ="wrap_content" 

        
    android:gravity
    ="center" 

        
    android:layout_centerHorizontal
    ="true" 

    /> 

    <
    TextView 

    android:layout_width
    ="fill_parent" 

    android:layout_height
    ="wrap_content" 

    android:text
    ="aaaaaaaaaaaaaaaaaaaaa" 


    /> 

    </
    LinearLayout
    > 

 
 
Java 代码
public 
class AlarmAlert 
extends Activity 



    @Override 

    
protected 
void onCreate(Bundle savedInstanceState)    

    { 

        
super.onCreate(savedInstanceState); 

setContentView(R.layout.mylayout); 


ImageView img=(ImageView)findViewById(R.id.imageView); 

img.setBackgroundResource(R.anim.simple_animation); 


MyAnimationRoutine mar= 
new MyAnimationRoutine(); 

MyAnimationRoutine2 mar2= 
new MyAnimationRoutine2(); 

Timer t=
new Timer(
false); 

t.schedule(mar,100); 

Timer t2=
new Timer(
false); 

t2.schedule(mar2,5000); 


}    

class MyAnimationRoutine 
extends TimerTask{ 

@Override 

public 
void run(){ 

    ImageView img=(ImageView)findViewById(R.id.imageView); 

    AnimationDrawable frameAnimation=(AnimationDrawable) 

    img.getBackground(); 

    frameAnimation.start(); 

     



class MyAnimationRoutine2 
extends TimerTask{ 

@Override 

public 
void run() 


    ImageView img=(ImageView) findViewById(R.id.imageView); 

    AnimationDrawable frameAnimation=(AnimationDrawable) 

    img.getBackground(); 

    frameAnimation.stop(); 


}
代码运行的结果6张图片按照顺序的播放一次.有一点需要强调的是:启动Frame Animation动画的不能在OnCreate()中,因为在OnCreate()进行内部控制,所以我建子类,开始和停止方法。不然OnCreate()中启动动画,就只能看到第一张图片。
 
 
 
 
 
 
 
下面,阅读Android SDK中对AnimationDrawable的介绍,有个简单的了解:
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() 停止当前动画
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() 停止当前动画
本文转自luojinghappy 51CTO博客,原文链接:http://blog.51cto.com/luojinghappy/326048,如需转载请自行联系原作者
你可能感兴趣的文章
一个命令完成[打包+同步七牛cdn+上传服务器]
查看>>
动态加载的一些坑
查看>>
javascript之深浅拷贝
查看>>
正则表达式
查看>>
特征值分解和奇异值分解
查看>>
js设计模式--迭代器模式
查看>>
Python操作目录,如:获取当前工作目录,获取执行命令的位置,路径拼接,路径拆分,文件重命名,删除文件,复制文件...
查看>>
javascript的深拷贝和浅拷贝
查看>>
请把你的小手放到你的头像上
查看>>
postCss 初识 (文章较长,需要耐心)
查看>>
微小企业如何更好的管理自己的进销?分享你一个saas平台
查看>>
如何用Redis实现分布式缓存
查看>>
Item 10 Always override toString
查看>>
大咖书单 | 技术人员不容错过的职场修炼手册
查看>>
unicode编码与utf8互转
查看>>
mysql 存储过程 函数
查看>>
中国域名注册量近800万:4月第三周增6.3万居第二
查看>>
中国万网3月上旬域名总量净增4.2万 国内份额超24%
查看>>
全球域名总量降至1.36亿个:3月上旬净减1.47万个
查看>>
11月钓鱼网站简报:阿里巴巴占比居首 新网次之
查看>>