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" android:oneshot="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中看的很明白。

一:新建一个工程AnimationDrawableDemo。
二:在res/drawable下面放入我们需要演示的图片。
lock_anim_00.png
lock_anim_02.png
lock_anim_04.png
lock_anim_06.png
lock_anim_08.png
lock_anim_10.png
lock_anim_12.png
lock_anim_14.png


新建一个Animation资源文件。文件如下:
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/lock_anim_00" android:duration="400" /> <item android:drawable="@drawable/lock_anim_02" android:duration="400" /> <item android:drawable="@drawable/lock_anim_04" android:duration="400" /> <item android:drawable="@drawable/lock_anim_06" android:duration="400" /> <item android:drawable="@drawable/lock_anim_08" android:duration="400" /> <item android:drawable="@drawable/lock_anim_10" android:duration="400" /> <item android:drawable="@drawable/lock_anim_12" android:duration="400" /> <item android:drawable="@drawable/lock_anim_14" android:duration="400" /></animation-list>

三:在main.xml文件中导入一个ImageView控件。函数代码如下:
package com.rocky.studio.ch02.ex2;import android.app.Activity;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.widget.Button;import android.widget.ImageView;public class AnimationDrawableDemo extends Activity {private Button m_RunButton;private Button m_StopButton;private ImageView imgView;private AnimationDrawable mAnimation;private static final long START_DELAY = 1000;private Handler mHandler = new Handler(); private Runnable mRunnable = new Runnable() { public void run() { startAnimation(mAnimation); } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); m_RunButton=(Button)this.findViewById(R.id.Button01); m_StopButton=(Button)this.findViewById(R.id.Button02); m_RunButton.setOnClickListener( m_BtnRunClickListener); m_StopButton.setOnClickListener(m_BtnStopClickListener); imgView=(ImageView)this.findViewById(R.id.ImageView01); imgView.setBackgroundResource(R.drawable.lock_anim); mAnimation = (AnimationDrawable) imgView.getBackground(); } @Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();//stopAnimation(mAnimation);}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();//mHandler.postDelayed(mRunnable, START_DELAY);}private View.OnClickListener m_BtnRunClickListener=new View.OnClickListener() {public void onClick(View arg0) {// TODO Auto-generated method stubstartAnimation(mAnimation);} }; private View.OnClickListener m_BtnStopClickListener=new View.OnClickListener() {public void onClick(View arg0) {// TODO Auto-generated method stubstopAnimation(mAnimation);} }; protected void startAnimation(final AnimationDrawable animation) { if (animation != null && !animation.isRunning()) { animation.run(); } } protected void stopAnimation(final AnimationDrawable animation) { if (animation != null && animation.isRunning()) animation.stop(); } }


四:如果需要一打开就动画显示://mHandler.postDelayed(mRunnable, START_DELAY);
这句话的意思是开启一个线程,开始执行操作。

五:这样就基本完成了操作。最好还是些个Demo来测试练练手。






更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android初涉JNI
  6. Android新组件应用
  7. Android(安卓)开发工具(以后持续更新)
  8. 查询备份Android(安卓)PDU彩信
  9. Android日历操作

随机推荐

  1. android 内存使用
  2. Android(安卓)Studio 常用插件收集
  3. android studio/idea各种坑
  4. Android消息循环机制源码分析
  5. Android最佳实践之Notification、下拉刷
  6. Android深入浅出系列课程---Lesson6 AAF1
  7. Android(安卓)sqlite 表更新
  8. 用Flex开发移动应用(1)---- 创建一个新的Mo
  9. Mac 10.12 编译 Android(安卓)源码
  10. Android的android.os.DeadObjectExceptio