Most visited

Recently visited

Added in API level 1

AnimationDrawable

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();
 

Developer Guides

有关使用 AnimationDrawable动画 AnimationDrawable更多信息,请阅读 Drawable Animation开发人员指南。

Summary

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)

使用当前的 Drawable.Callback实现使此Drawable Drawable.Callback

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

XML attributes

android:drawable

引用可用于该帧的可绘制资源。 如果没有给出,drawable必须由第一个子标签定义。

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 drawable

android:duration

显示此帧的时间量(以毫秒为单位)。

必须是整数值,例如“ 100 ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 duration

android:oneshot

如果为true,则动画将只运行一次然后停止。 如果为false(默认值),它将持续运行,在最后一次完成后的第一帧重新开始。

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 oneshot

android:variablePadding

如果为true,则允许绘制的填充根据所选的当前状态进行更改。 如果为false,则填充将保持不变(基于所有状态的最大填充)。 启用此功能要求可绘制的所有者在状态更改时处理布局,这通常不受支持。

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 variablePadding

android:visible

提供drawable的初始可见性状态; 默认值是false。 setVisible(boolean, boolean)

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 visible

Public constructors

AnimationDrawable

Added in API level 1
AnimationDrawable ()

Public methods

addFrame

Added in API level 1
void addFrame (Drawable frame, 
                int duration)

向动画添加一个框架

Parameters
frame Drawable: The frame to add
duration int: How long in milliseconds the frame should appear

getDuration

Added in API level 1
int getDuration (int i)

Parameters
i int
Returns
int The duration in milliseconds of the frame at the specified index

getFrame

Added in API level 1
Drawable getFrame (int index)

Parameters
index int
Returns
Drawable The Drawable at the specified frame index

getNumberOfFrames

Added in API level 1
int getNumberOfFrames ()

Returns
int The number of frames in the animation

inflate

Added in API level 21
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

isOneShot

Added in API level 1
boolean isOneShot ()

Returns
boolean True of the animation will play once, false otherwise

isRunning

Added in API level 1
boolean isRunning ()

指示动画是否正在运行。

Returns
boolean true if the animation is running, false otherwise

mutate

Added in API level 3
Drawable mutate ()

使这个drawable可变。 这个操作不能逆转。 一个可变的drawable保证不与其他drawable共享它的状态。 当你需要修改从资源加载的drawable的属性时,这是特别有用的。 默认情况下,从同一资源加载的所有可绘制实例共享一个公共状态; 如果修改一个实例的状态,则所有其他实例都将收到相同的修改。 在可变Drawable上调用此方法将不起作用。

Returns
Drawable This drawable.

run

Added in API level 1
void run ()

此方法仅用于实现目的,不应直接调用。 改为调用start()

也可以看看:

setOneShot

Added in API level 1
void setOneShot (boolean oneShot)

设置动画是否应播放一次或重复播放。

Parameters
oneShot boolean: Pass true if the animation should only play once

setVisible

Added in API level 1
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

start

Added in API level 1
void start ()

从第一帧开始动画,必要时循环播放。 如果动画正在运行,则此方法不起作用。

注意:不要在您的活动的onCreate(Bundle)方法中调用此方法,因为AnimationDrawable尚未完全附加到窗口。 如果您想要在不需要交互的情况下立即播放动画,那么您可能需要从您的活动中的onWindowFocusChanged(boolean)方法中调用该方法,这会在Android将您的窗口聚焦时调用。

也可以看看:

stop

Added in API level 1
void stop ()

在当前帧停止动画。 如果动画未运行,则此方法无效。

也可以看看:

unscheduleSelf

Added in API level 1
void unscheduleSelf (Runnable what)

使用当前的Drawable.Callback实现使此Drawable Drawable.Callback 如果Drawable没有附加回调,则不执行任何操作。

Parameters
what Runnable: The runnable that you no longer want called.

Protected methods

setConstantState

Added in API level 1
void setConstantState (DrawableContainer.DrawableContainerState state)

Parameters
state DrawableContainer.DrawableContainerState

Hooray!