public class AnimationDrawable
extends DrawableContainer
implements Runnable, Animatable
java.lang.Object | |||
↳ | android.graphics.drawable.Drawable | ||
↳ | android.graphics.drawable.DrawableContainer | ||
↳ | android.graphics.drawable.AnimationDrawable |
用于创建逐帧动画的对象,由一系列Drawable对象定义,可用作View对象的背景。
创建逐帧动画的最简单方法是在XML文件中定义动画,放置在res / drawable /文件夹中,并将其设置为View对象的背景。 然后,致电start()
运行动画。
在XML中定义的AnimationDrawable由一个<animation-list>
元素和一系列嵌套的<item>
标签组成。 每个项目定义了动画的一个框架。 看下面的例子。
res / drawable /文件夹中的spin_animation.xml文件:
<!-- Animation frames are wheel0.png through wheel5.png files inside the res/drawable/ folder --> <animation-list android:id="@+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>
这里是加载和播放这个动画的代码。
// 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();
有关使用 AnimationDrawable
动画 AnimationDrawable
更多信息,请阅读 Drawable Animation开发人员指南。
XML attributes |
|
---|---|
android:drawable |
Reference to a drawable resource to use for the frame. |
android:duration |
Amount of time (in milliseconds) to display this frame. |
android:oneshot |
If true, the animation will only run a single time and then stop. |
android:variablePadding |
If true, allows the drawable's padding to change based on the current state that is selected. |
android:visible |
Provides initial visibility state of the drawable; the default value is false. |
Public constructors |
|
---|---|
AnimationDrawable() |
Public methods |
|
---|---|
void |
addFrame(Drawable frame, int duration) 向动画添加一个框架 |
int |
getDuration(int i) |
Drawable |
getFrame(int index) |
int |
getNumberOfFrames() |
void |
inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Resources.Theme theme) 从可选的由主题设计的XML资源中扩展此Drawable。 |
boolean |
isOneShot() |
boolean |
isRunning() 指示动画是否正在运行。 |
Drawable |
mutate() 使这个drawable可变。 |
void |
run() 此方法仅用于实现目的,不应直接调用。 |
void |
setOneShot(boolean oneShot) 设置动画是否应播放一次或重复播放。 |
boolean |
setVisible(boolean visible, boolean restart) 设置此AnimationDrawable是否可见。 |
void |
start() 从第一帧开始动画,必要时循环播放。 |
void |
stop() 在当前帧停止动画。 |
void |
unscheduleSelf(Runnable what) 使用当前的 |
Protected methods |
|
---|---|
void |
setConstantState(DrawableContainer.DrawableContainerState state) |
Inherited methods |
|
---|---|
From class android.graphics.drawable.DrawableContainer
|
|
From class android.graphics.drawable.Drawable
|
|
From class java.lang.Object
|
|
From interface android.graphics.drawable.Drawable.Callback
|
|
From interface java.lang.Runnable
|
|
From interface android.graphics.drawable.Animatable
|
引用可用于该帧的可绘制资源。 如果没有给出,drawable必须由第一个子标签定义。
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 drawable
。
显示此帧的时间量(以毫秒为单位)。
必须是整数值,例如“ 100
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 duration
。
如果为true,则动画将只运行一次然后停止。 如果为false(默认值),它将持续运行,在最后一次完成后的第一帧重新开始。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 oneshot
。
如果为true,则允许绘制的填充根据所选的当前状态进行更改。 如果为false,则填充将保持不变(基于所有状态的最大填充)。 启用此功能要求可绘制的所有者在状态更改时处理布局,这通常不受支持。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 variablePadding
。
提供drawable的初始可见性状态; 默认值是false。 见setVisible(boolean, boolean)
。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 visible
。
void addFrame (Drawable frame, int duration)
向动画添加一个框架
Parameters | |
---|---|
frame |
Drawable : The frame to add |
duration |
int : How long in milliseconds the frame should appear |
int getDuration (int i)
Parameters | |
---|---|
i |
int
|
Returns | |
---|---|
int |
The duration in milliseconds of the frame at the specified index |
Drawable getFrame (int index)
Parameters | |
---|---|
index |
int
|
Returns | |
---|---|
Drawable |
The Drawable at the specified frame index |
int getNumberOfFrames ()
Returns | |
---|---|
int |
The number of frames in the animation |
void inflate (Resources r, XmlPullParser parser, AttributeSet attrs, Resources.Theme theme)
从可选的由主题设计的XML资源中扩展此Drawable。 对于每个Drawable,这不能被调用一次以上。 请注意,框架可能已经调用过这一次从XML资源创建Drawable实例。
Parameters | |
---|---|
r |
Resources : Resources used to resolve attribute values |
parser |
XmlPullParser : XML parser from which to inflate this Drawable |
attrs |
AttributeSet : Base set of attribute values |
theme |
Resources.Theme : Theme to apply, may be null |
Throws | |
---|---|
XmlPullParserException |
|
IOException |
boolean isOneShot ()
Returns | |
---|---|
boolean |
True of the animation will play once, false otherwise |
boolean isRunning ()
指示动画是否正在运行。
Returns | |
---|---|
boolean |
true if the animation is running, false otherwise |
Drawable mutate ()
使这个drawable可变。 这个操作不能逆转。 一个可变的drawable保证不与其他drawable共享它的状态。 当你需要修改从资源加载的drawable的属性时,这是特别有用的。 默认情况下,从同一资源加载的所有可绘制实例共享一个公共状态; 如果修改一个实例的状态,则所有其他实例都将收到相同的修改。 在可变Drawable上调用此方法将不起作用。
Returns | |
---|---|
Drawable |
This drawable. |
void setOneShot (boolean oneShot)
设置动画是否应播放一次或重复播放。
Parameters | |
---|---|
oneShot |
boolean : Pass true if the animation should only play once |
boolean setVisible (boolean visible, boolean restart)
设置此AnimationDrawable是否可见。
当drawable变为不可见时,它将暂停其动画。 随后将restart
设置为true的可见变化将从第一帧重新开始动画。 如果restart
为假, restart
绘制将从最近的帧中恢复。 如果drawable已经到达最后一帧,它将循环回到第一帧,除非它是可单setOneShot(boolean)
(通过setOneShot(boolean)
设置),在这种情况下,它将保留在最后一帧。
Parameters | |
---|---|
visible |
boolean : true if visible, false otherwise |
restart |
boolean : when visible, true to force the animation to restart from the first frame |
Returns | |
---|---|
boolean |
true if the new visibility is different than its previous state |
void start ()
从第一帧开始动画,必要时循环播放。 如果动画正在运行,则此方法不起作用。
注意:不要在您的活动的onCreate(Bundle)
方法中调用此方法,因为AnimationDrawable
尚未完全附加到窗口。 如果您想要在不需要交互的情况下立即播放动画,那么您可能需要从您的活动中的onWindowFocusChanged(boolean)
方法中调用该方法,这会在Android将您的窗口聚焦时调用。
也可以看看:
void unscheduleSelf (Runnable what)
使用当前的Drawable.Callback
实现使此Drawable Drawable.Callback
。 如果Drawable没有附加回调,则不执行任何操作。
Parameters | |
---|---|
what |
Runnable : The runnable that you no longer want called. |
void setConstantState (DrawableContainer.DrawableContainerState state)
Parameters | |
---|---|
state |
DrawableContainer.DrawableContainerState
|