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资源文件。文件如下:
view plaincopy to clipboardprint?<?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> <?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控件。函数代码如下:
view plaincopy to clipboardprint?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(); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); //stopAnimation(mAnimation); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); //mHandler.postDelayed(mRunnable, START_DELAY); } private View.OnClickListener m_BtnRunClickListener=new View.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub startAnimation(mAnimation); } }; private View.OnClickListener m_BtnStopClickListener=new View.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub stopAnimation(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(); } } 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();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
//stopAnimation(mAnimation);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//mHandler.postDelayed(mRunnable, START_DELAY);
}
private View.OnClickListener m_BtnRunClickListener=new View.OnClickListener()
{
public void onClick(View arg0) {
// TODO Auto-generated method stub
startAnimation(mAnimation);
}
};
private View.OnClickListener m_BtnStopClickListener=new View.OnClickListener()
{
public void onClick(View arg0) {
// TODO Auto-generated method stub
stopAnimation(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来测试练练手。
首先最基本的,我们可以参见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资源文件。文件如下:
view plaincopy to clipboardprint?<?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> <?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控件。函数代码如下:
view plaincopy to clipboardprint?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(); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); //stopAnimation(mAnimation); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); //mHandler.postDelayed(mRunnable, START_DELAY); } private View.OnClickListener m_BtnRunClickListener=new View.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub startAnimation(mAnimation); } }; private View.OnClickListener m_BtnStopClickListener=new View.OnClickListener() { public void onClick(View arg0) { // TODO Auto-generated method stub stopAnimation(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(); } } 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();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
//stopAnimation(mAnimation);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//mHandler.postDelayed(mRunnable, START_DELAY);
}
private View.OnClickListener m_BtnRunClickListener=new View.OnClickListener()
{
public void onClick(View arg0) {
// TODO Auto-generated method stub
startAnimation(mAnimation);
}
};
private View.OnClickListener m_BtnStopClickListener=new View.OnClickListener()
{
public void onClick(View arg0) {
// TODO Auto-generated method stub
stopAnimation(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来测试练练手。