Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 457|回复: 0

Android 之AnimationDrawable-  Android学习

[复制链接]

该用户从未签到

发表于 2011-10-24 14:39:12 | 显示全部楼层 |阅读模式
Android 之AnimationDrawable
AnimationDrawable是Android实现动画的一种简单的形式。这里用一个Demo来简单讲解下。
首先最基本的,我们可以参见DOC上的说明,它的资料最正宗!强烈建议大家要去官网的文档上搜索下,然后认真看看,对学英语都是有好处的,当然,学英语不是主要目的。
下面摘抄了主要的文字部分。
Class Overview
An object used to create frame-by-frame animations, defined by a series of Drawable objects, which can be used as a View object's background.
The simplest way to create a frame-by-frame animation is to define the animation in an XML file, placed in the res/drawable/ folder, and set it as the background to a View object. Then, call run() to start the animation.
An AnimationDrawable defined in XML consists of a single
<animation-list>
element, and a series of nested<item>
tags. Each item defines a frame of the animation. See the example below.
spin_animation.xml file in res/drawable/ folder:
<!-- Animation frames are wheel0.png -- wheel5.png files inside the res/drawable/ folder -->
  <animation-list android:id = "selected" androidneshot = "false" >
    <item android:drawable = "@drawable/wheel0" android:duration = "50" />
    <item android:drawable = "@drawable/wheel1" android:duration = "50" />
    <item android:drawable = "@drawable/wheel2" android:duration = "50" />
    <item android:drawable = "@drawable/wheel3" android:duration = "50" />
    <item android:drawable = "@drawable/wheel4" android:duration = "50" />
    <item android:drawable = "@drawable/wheel5" android:duration = "50" />
  </animation-list>
Here is the code to load and play this animation.
  // Load the ImageView that will host the animation and
  // set its background to our AnimationDrawable XML resource.
  ImageView img = (ImageView)findViewById (R.id.spinning_wheel_image);
img.setBackgroundResource(R.drawable.spin_animation);
  // Get the background, which has been compiled to an AnimationDrawable object.
  AnimationDrawable frameAnimation=(AnimationDrawable)img.getBackground();
  // Start the animation (looped playback by default).
frameAnimation.start();
以上的资料大家也可以在DOC中看的很明白。
下面我以几个DEMO来做测试,具体说明大家见我里面的说明,我作了很多注释,方便大家阅读。
Android播放gif动画 (MainActivity中第一种方式的代码文字说明)
Android不支持直接播放gif动能,如果在程序中将gif分解,然后播放各个图片这个会很消耗内存,因此我们要提前将动画分解,将其放入资源文件中。
1.在drawable新建xml文件,battery_anim.xml,内容:
<animation-list android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:duration="150" android:drawable="@drawable/battery_anim0" />
<item android:duration="150" android:drawable="@drawable/battery_anim1" />
<item android:duration="150" android:drawable="@drawable/battery_anim2" />
<item android:duration="150" android:drawable="@drawable/battery_anim3" />
<item android:duration="150" android:drawable="@drawable/battery_anim4" />
<item android:duration="150" android:drawable="@drawable/battery_anim5" />
</animation-list>
对应的item 为顺序的图片从开始到结束,duration为每张逐帧播放间隔,oneshot 为false 代表循环播放,设置为true 即播放一次即停止。
2.在main.xml文件中插入ImageView控件代码如下:
<ImageView android:visibility="visible"
android:layout_width="wrap_content"
android:layout_marginTop="100dip" android:layout_centerHorizontal="true"
android:layout_height="wrap_content"
android:background="@drawable/battery_anim"
android:id="@+id/batteryStatus"></ImageView>
3.java代码如下:
ImageView imageView = null;  
AnimationDrawable anim = null;
public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
       setContentView(R.layout.main);  
        imageView = (ImageView) findViewById(R.id.ImageView01);  
        Button mybtn =  (Button) findViewById(R.id.Button01);  
        mybtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method
AnimationDrawable anim = new AnimationDrawable();  
Object ob = imageView.getBackground();  
anim = (AnimationDrawable) ob;         
anim.stop();        
anim.start();  
}
});
}
4.效果展示:如果程序运行所示。


MainActivity中第二种方式的代码说明:
如果需要一打开就动画显示://mHandler.postDelayed(mRunnable, START_DELAY);
这句话的意思是开启一个线程,开始执行操作。


MainActivity中第三种方式的代码说明:
使用JAVA代码的方式对一些参数做设定:前面的例子都是在XML文件中设置一些参数,在这里,我们用代码去设定一些参数。个人认为还是在XML文件中设定会方便,但是用代码的方式会具有可扩展性。【这个具体的代码我还没有实现,等我解决了会修改这篇文章,请关注】
//实例化AnimationDrawable对象
frameAnimation = new AnimationDrawable();
//装载资源
for(int i = 1; i <= 15; i++){
intid=getResources().getIdentifier("a"+i,"drawable", mContext.getPackageName());
Drawable mBitAnimation = getResources().getDrawable(id);
//参数mBitAnimation是该帧的图片
//参数500是该帧显示的时间,按毫秒计算
frameAnimation.addFrame(mBitAnimation, 500);
}
/*上边用到了Resources的getIdentifier方法
方法返回一个资源的唯一标识符,如果没有这个资源就返回0
* 0不是有效的标识符,在说说这个方法几个参数的含义
* 第一个
就是我们的资源名称了。
* 第二个
就是我们要去哪里找我们的资源
我们的图片在drawable 下
所以为drawable
* 第三个
我们用了Context的getPackageName返回应用程序的包名
* */ 
//设置播放模式是否循环播放,false表示循环,true表示不循环
frameAnimation.setOneShot(false);
//开始播放动画
frameAnimation.start();
备注:这篇只是最基础的东西,大家先简单了解一下,明天我会继续写下一篇,敬请关注!


下面是代码,大家还是自己跑一遍比较好。
AnimTest.rar (147.33 KB, 下载次数: 4)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 11:35 , Processed in 0.414880 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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