AnimatedImageDrawable
public
class
AnimatedImageDrawable
extends Drawable
implements
Animatable2
java.lang.Object | ||
↳ | android.graphics.drawable.Drawable | |
↳ | android.graphics.drawable.AnimatedImageDrawable |
Drawable
for drawing animated images (like GIF).
The framework handles decoding subsequent frames in another thread and updating when necessary. The drawable will only animate while it is being displayed.
Created by ImageDecoder#decodeDrawable
. A user needs to call
start()
to start the animation.
It can also be defined in XML using the <animated-image>
element.
Summary
XML attributes | ||
---|---|---|
android:autoMirrored |
Indicates if the drawable needs to be mirrored when its layout direction is RTL (right-to-left). | |
android:autoStart |
When true, automatically start animating. | |
android:repeatCount |
Replace the loop count in the encoded data. | |
android:src |
Identifier of the image file. |
Constants | |
---|---|
int |
REPEAT_INFINITE
Pass this to |
Public constructors | |
---|---|
AnimatedImageDrawable()
Create an empty AnimatedImageDrawable. |
Public methods | |
---|---|
void
|
clearAnimationCallbacks()
Removes all existing animation callbacks. |
void
|
draw(Canvas canvas)
Draw in its bounds (set via setBounds) respecting optional effects such as alpha (set via setAlpha) and color filter (set via setColorFilter). |
int
|
getAlpha()
Gets the current alpha value for the drawable. |
ColorFilter
|
getColorFilter()
Returns the current color filter, or |
int
|
getIntrinsicHeight()
Returns the drawable's intrinsic height. |
int
|
getIntrinsicWidth()
Returns the drawable's intrinsic width. |
int
|
getOpacity()
This method is deprecated. This method is no longer used in graphics optimizations |
int
|
getRepeatCount()
Retrieve the number of times the animation will repeat. |
void
|
inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Resources.Theme theme)
Inflate this Drawable from an XML resource optionally styled by a theme. |
final
boolean
|
isAutoMirrored()
Tells if this Drawable will be automatically mirrored when its layout direction is RTL right-to-left. |
boolean
|
isRunning()
Return whether the animation is currently running. |
boolean
|
onLayoutDirectionChanged(int layoutDirection)
Called when the drawable's resolved layout direction changes. |
void
|
registerAnimationCallback(Animatable2.AnimationCallback callback)
Adds a callback to listen to the animation events. |
void
|
setAlpha(int alpha)
Specify an alpha value for the drawable. |
void
|
setAutoMirrored(boolean mirrored)
Set whether this Drawable is automatically mirrored when its layout direction is RTL (right-to left). |
void
|
setColorFilter(ColorFilter colorFilter)
Specify an optional color filter for the drawable. |
void
|
setRepeatCount(int repeatCount)
Specify the number of times to repeat the animation. |
void
|
start()
Start the animation. |
void
|
stop()
Stop the animation. |
boolean
|
unregisterAnimationCallback(Animatable2.AnimationCallback callback)
Removes the specified animation callback. |
Protected methods | |
---|---|
void
|
onBoundsChange(Rect bounds)
Override this in your subclass to change appearance if you vary based on the bounds. |
Inherited methods | |
---|---|
XML attributes
android:autoMirrored
Indicates if the drawable needs to be mirrored when its layout direction is RTL (right-to-left).
May be a boolean value, such as "true
" or
"false
".
android:autoStart
When true, automatically start animating. The default is false, meaning that the animation will not start until start() is called.
May be a boolean value, such as "true
" or
"false
".
android:repeatCount
Replace the loop count in the encoded data. A repeat count of 0 means that the animation will play once, regardless of the number of times specified in the encoded data. Setting this to infinite (-1) will result in the animation repeating as long as it is displayed (once start() is called).
May be an integer value, such as "100
".
Must be one of the following constant values.
Constant | Value | Description |
---|---|---|
infinite | ffffffff |
android:src
Identifier of the image file. This attribute is mandatory. It must be an image file with multiple frames, e.g. gif or webp
May be a reference to another resource, in the form
"@[+][package:]type/name
" or a theme
attribute in the form
"?[package:]type/name
".
May be a color value, in the form of "#rgb
",
"#argb
", "#rrggbb
", or
"#aarrggbb
".
Constants
REPEAT_INFINITE
public static final int REPEAT_INFINITE
Pass this to setRepeatCount(int)
to repeat infinitely.
Animatable2.AnimationCallback#onAnimationEnd
will never be
called unless there is an error.
Constant Value: -1 (0xffffffff)
Public constructors
AnimatedImageDrawable
public AnimatedImageDrawable ()
Create an empty AnimatedImageDrawable.
Public methods
clearAnimationCallbacks
public void clearAnimationCallbacks ()
Removes all existing animation callbacks.
draw
public void draw (Canvas canvas)
Draw in its bounds (set via setBounds) respecting optional effects such as alpha (set via setAlpha) and color filter (set via setColorFilter).
Parameters | |
---|---|
canvas |
Canvas : This value cannot be null . |
getAlpha
public int getAlpha ()
Gets the current alpha value for the drawable. 0 means fully transparent, 255 means fully opaque. This method is implemented by Drawable subclasses and the value returned is specific to how that class treats alpha. The default return value is 255 if the class does not override this method to return a value specific to its use of alpha.
Returns | |
---|---|
int |
Value is between 0 and 255 inclusive |
getColorFilter
public ColorFilter getColorFilter ()
Returns the current color filter, or null
if none set.
Returns | |
---|---|
ColorFilter |
This value may be null . |
getIntrinsicHeight
public int getIntrinsicHeight ()
Returns the drawable's intrinsic height.
Intrinsic height is the height at which the drawable would like to be laid out, including any inherent padding. If the drawable has no intrinsic height, such as a solid color, this method returns -1.
Returns | |
---|---|
int |
the intrinsic height, or -1 if no intrinsic height |
getIntrinsicWidth
public int getIntrinsicWidth ()
Returns the drawable's intrinsic width.
Intrinsic width is the width at which the drawable would like to be laid out, including any inherent padding. If the drawable has no intrinsic width, such as a solid color, this method returns -1.
Returns | |
---|---|
int |
the intrinsic width, or -1 if no intrinsic width |
getOpacity
public int getOpacity ()
This method is deprecated.
This method is no longer used in graphics optimizations
Return the opacity/transparency of this Drawable. The returned value is
one of the abstract format constants in
PixelFormat
:
PixelFormat.UNKNOWN
,
PixelFormat.TRANSLUCENT
,
PixelFormat.TRANSPARENT
, or
PixelFormat.OPAQUE
.
An OPAQUE drawable is one that draws all all content within its bounds, completely covering anything behind the drawable. A TRANSPARENT drawable is one that draws nothing within its bounds, allowing everything behind it to show through. A TRANSLUCENT drawable is a drawable in any other state, where the drawable will draw some, but not all, of the content within its bounds and at least some content behind the drawable will be visible. If the visibility of the drawable's contents cannot be determined, the safest/best return value is TRANSLUCENT.
Generally a Drawable should be as conservative as possible with the
value it returns. For example, if it contains multiple child drawables
and only shows one of them at a time, if only one of the children is
TRANSLUCENT and the others are OPAQUE then TRANSLUCENT should be
returned. You can use the method resolveOpacity(int, int)
to perform a
standard reduction of two opacities to the appropriate single output.
Note that the returned value does not necessarily take into account a
custom alpha or color filter that has been applied by the client through
the setAlpha(int)
or setColorFilter(ColorFilter)
methods. Some subclasses,
such as BitmapDrawable
, ColorDrawable
, and GradientDrawable
,
do account for the value of setAlpha(int)
, but the general behavior is dependent
upon the implementation of the subclass.
Returns | |
---|---|
int |
Value is PixelFormat.UNKNOWN , PixelFormat.TRANSLUCENT , PixelFormat.TRANSPARENT , or PixelFormat.OPAQUE |
getRepeatCount
public int getRepeatCount ()
Retrieve the number of times the animation will repeat.
By default, the repeat count in the encoded data is respected. If the
value is REPEAT_INFINITE
, the animation will repeat as long as
it is displayed. If the value is 0
, it will play once.
Calling setRepeatCount(int)
will make future calls to this method
return the value passed to setRepeatCount(int)
.
Returns | |
---|---|
int |
inflate
public void inflate (Resources r, XmlPullParser parser, AttributeSet attrs, Resources.Theme theme)
Inflate this Drawable from an XML resource optionally styled by a theme. This can't be called more than once for each Drawable. Note that framework may have called this once to create the Drawable instance from XML resource.
Parameters | |
---|---|
r |
Resources : Resources used to resolve attribute values
This value cannot be null . |
parser |
XmlPullParser : XML parser from which to inflate this Drawable
This value cannot be null . |
attrs |
AttributeSet : Base set of attribute values
This value cannot be null . |
theme |
Resources.Theme : Theme to apply, may be null |
Throws | |
---|---|
IOException |
|
XmlPullParserException |
isAutoMirrored
public final boolean isAutoMirrored ()
Tells if this Drawable will be automatically mirrored when its layout direction is RTL
right-to-left. See LayoutDirection
.
Returns | |
---|---|
boolean |
boolean Returns true if this Drawable will be automatically mirrored. |
isRunning
public boolean isRunning ()
Return whether the animation is currently running.
When this drawable is created, this will return false
. A client
needs to call start()
to start the animation.
Returns | |
---|---|
boolean |
True if the animation is running, false otherwise. |
onLayoutDirectionChanged
public boolean onLayoutDirectionChanged (int layoutDirection)
Called when the drawable's resolved layout direction changes.
Parameters | |
---|---|
layoutDirection |
int : the new resolved layout direction
Value is View.LAYOUT_DIRECTION_LTR , or View.LAYOUT_DIRECTION_RTL |
Returns | |
---|---|
boolean |
true if the layout direction change has caused the
appearance of the drawable to change such that it needs to be
re-drawn, false otherwise |
registerAnimationCallback
public void registerAnimationCallback (Animatable2.AnimationCallback callback)
Adds a callback to listen to the animation events.
Parameters | |
---|---|
callback |
Animatable2.AnimationCallback : This value cannot be null . |
setAlpha
public void setAlpha (int alpha)
Specify an alpha value for the drawable. 0 means fully transparent, and 255 means fully opaque.
Parameters | |
---|---|
alpha |
int : Value is between 0 and 255 inclusive |
setAutoMirrored
public void setAutoMirrored (boolean mirrored)
Set whether this Drawable is automatically mirrored when its layout direction is RTL
(right-to left). See LayoutDirection
.
Parameters | |
---|---|
mirrored |
boolean : Set to true if the Drawable should be mirrored, false if not. |
setColorFilter
public void setColorFilter (ColorFilter colorFilter)
Specify an optional color filter for the drawable.
If a Drawable has a ColorFilter, each output pixel of the Drawable's drawing contents will be modified by the color filter before it is blended onto the render target of a Canvas.
Pass null
to remove any existing color filter.
Note: Setting a non-null
color
filter disables tint
.
Parameters | |
---|---|
colorFilter |
ColorFilter : This value may be null . |
setRepeatCount
public void setRepeatCount (int repeatCount)
Specify the number of times to repeat the animation.
By default, the repeat count in the encoded data is respected. If set
to REPEAT_INFINITE
, the animation will repeat as long as it is
displayed. If the value is 0
, the animation will play once.
This call replaces the current repeat count. If the encoded data
specified a repeat count of 2
(meaning that
getRepeatCount()
returns 2
, the animation will play
three times. Calling setRepeatCount(1)
will result in playing only
twice and getRepeatCount()
returning 1
.
If the animation is already playing, the iterations that have already occurred count towards the new count. If the animation has already repeated the appropriate number of times (or more), it will finish its current iteration and then stop.
Parameters | |
---|---|
repeatCount |
int : Value is REPEAT_INFINITE or greater |
start
public void start ()
Start the animation.
Does nothing if the animation is already running. If the animation is stopped, this will reset it.
When the drawable is drawn, starting the animation,
Animatable2.AnimationCallback#onAnimationStart
will be called.
stop
public void stop ()
Stop the animation.
If the animation is stopped, it will continue to display the frame it was displaying when stopped.
unregisterAnimationCallback
public boolean unregisterAnimationCallback (Animatable2.AnimationCallback callback)
Removes the specified animation callback.
Parameters | |
---|---|
callback |
Animatable2.AnimationCallback : This value cannot be null . |
Returns | |
---|---|
boolean |
false if callback didn't exist in the call back list, or true if
callback has been removed successfully. |
Protected methods
onBoundsChange
protected void onBoundsChange (Rect bounds)
Override this in your subclass to change appearance if you vary based on the bounds.
Parameters | |
---|---|
bounds |
Rect : This value cannot be null . |
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2024-06-18 UTC.