Added in API level 28

AnimatedImageDrawable


open class AnimatedImageDrawable : Drawable, Animatable2
kotlin.Any
   ↳ 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 android.graphics.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
static Int

Pass this to setRepeatCount to repeat infinitely.

Public constructors

Create an empty AnimatedImageDrawable.

Public methods
open Unit

Removes all existing animation callbacks.

open Unit
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).

open Int

Gets the current alpha value for the drawable.

open ColorFilter?

Returns the current color filter, or null if none set.

open Int

Returns the drawable's intrinsic height.

open Int

Returns the drawable's intrinsic width.

open Int

Return the opacity/transparency of this Drawable.

open Int

Retrieve the number of times the animation will repeat.

open Unit
inflate(r: Resources, parser: XmlPullParser, attrs: AttributeSet, theme: Resources.Theme?)

Inflate this Drawable from an XML resource optionally styled by a theme.

Boolean

Tells if this Drawable will be automatically mirrored when its layout direction is RTL right-to-left.

open Boolean

open Boolean

Return whether the animation is currently running.

open Boolean
onLayoutDirectionChanged(layoutDirection: Int)

Called when the drawable's resolved layout direction changes.

open Unit

Adds a callback to listen to the animation events.

open Unit
setAlpha(alpha: Int)

Specify an alpha value for the drawable.

open Unit

Set whether this Drawable is automatically mirrored when its layout direction is RTL (right-to left).

open Unit
setColorFilter(colorFilter: ColorFilter?)

Specify an optional color filter for the drawable.

open Unit
setFilterBitmap(filterBitmap: Boolean)

Set to true to have the drawable filter its bitmaps with bilinear sampling when they are scaled or rotated.

open Unit
setRepeatCount(repeatCount: Int)

Specify the number of times to repeat the animation.

open Unit

Start the animation.

open Unit

Stop the animation.

open Boolean

Removes the specified animation callback.

Protected methods
open Unit

Override this in your subclass to change appearance if you vary based on the bounds.

Inherited functions

XML attributes

android:autoMirrored

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

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

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

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

Added in API level 28
static val REPEAT_INFINITE: Int

Pass this to setRepeatCount to repeat infinitely.

Animatable2.AnimationCallback.onAnimationEnd will never be called unless there is an error.

Value: -1

Public constructors

AnimatedImageDrawable

Added in API level 28
AnimatedImageDrawable()

Create an empty AnimatedImageDrawable.

Public methods

clearAnimationCallbacks

Added in API level 28
open fun clearAnimationCallbacks(): Unit

Removes all existing animation callbacks.

draw

Added in API level 28
open fun draw(canvas: Canvas): Unit

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

Added in API level 28
open fun getAlpha(): Int

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.

Return
Int Value is between 0 and 255 inclusive

getColorFilter

Added in API level 28
open fun getColorFilter(): ColorFilter?

Returns the current color filter, or null if none set.

Return
ColorFilter? This value may be null.

getIntrinsicHeight

Added in API level 28
open fun getIntrinsicHeight(): Int

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.

Return
Int the intrinsic height, or -1 if no intrinsic height

getIntrinsicWidth

Added in API level 28
open fun getIntrinsicWidth(): Int

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.

Return
Int the intrinsic width, or -1 if no intrinsic width

getOpacity

Added in API level 28
open fun getOpacity(): Int

Return the opacity/transparency of this Drawable. The returned value is one of the abstract format constants in android.graphics.PixelFormat: android.graphics.PixelFormat#UNKNOWN, android.graphics.PixelFormat#TRANSLUCENT, android.graphics.PixelFormat#TRANSPARENT, or android.graphics.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 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 or #setColorFilter methods. Some subclasses, such as BitmapDrawable, ColorDrawable, and GradientDrawable, do account for the value of setAlpha, but the general behavior is dependent upon the implementation of the subclass.

Return
Int Value is one of the following:

getRepeatCount

Added in API level 28
open fun getRepeatCount(): Int

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 will make future calls to this method return the value passed to setRepeatCount.

inflate

Added in API level 28
open fun inflate(
    r: Resources,
    parser: XmlPullParser,
    attrs: AttributeSet,
    theme: Resources.Theme?
): Unit

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
Exceptions
java.io.IOException
org.xmlpull.v1.XmlPullParserException

isAutoMirrored

Added in API level 28
fun isAutoMirrored(): Boolean

Tells if this Drawable will be automatically mirrored when its layout direction is RTL right-to-left. See android.util.LayoutDirection.

Return
Boolean boolean Returns true if this Drawable will be automatically mirrored.

isFilterBitmap

Added in API level 28
open fun isFilterBitmap(): Boolean
Return
Boolean whether this drawable filters its bitmaps

isRunning

Added in API level 28
open fun isRunning(): Boolean

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.

Return
Boolean True if the animation is running, false otherwise.

onLayoutDirectionChanged

Added in API level 28
open fun onLayoutDirectionChanged(layoutDirection: Int): Boolean

Called when the drawable's resolved layout direction changes.

Parameters
layoutDirection Int: the new resolved layout direction.
Value is one of the following:
Return
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

Added in API level 28
open fun registerAnimationCallback(callback: Animatable2.AnimationCallback): Unit

Adds a callback to listen to the animation events.

Parameters
callback Animatable2.AnimationCallback: This value cannot be null.

setAlpha

Added in API level 28
open fun setAlpha(alpha: Int): Unit

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

Added in API level 28
open fun setAutoMirrored(mirrored: Boolean): Unit

Set whether this Drawable is automatically mirrored when its layout direction is RTL (right-to left). See android.util.LayoutDirection.

Parameters
mirrored Boolean: Set to true if the Drawable should be mirrored, false if not.

setColorFilter

Added in API level 28
open fun setColorFilter(colorFilter: ColorFilter?): Unit

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.

setFilterBitmap

Added in API level 28
open fun setFilterBitmap(filterBitmap: Boolean): Unit

Set to true to have the drawable filter its bitmaps with bilinear sampling when they are scaled or rotated.

This can improve appearance when bitmaps are rotated. If the drawable does not use bitmaps, this call is ignored.

setRepeatCount

Added in API level 28
open fun setRepeatCount(repeatCount: Int): Unit

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

Added in API level 28
open fun start(): Unit

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

Added in API level 28
open fun stop(): Unit

Stop the animation.

If the animation is stopped, it will continue to display the frame it was displaying when stopped.

unregisterAnimationCallback

Added in API level 28
open fun unregisterAnimationCallback(callback: Animatable2.AnimationCallback): Boolean

Removes the specified animation callback.

Parameters
callback Animatable2.AnimationCallback: This value cannot be null.
Return
Boolean false if callback didn't exist in the call back list, or true if callback has been removed successfully.

Protected methods

onBoundsChange

Added in API level 28
protected open fun onBoundsChange(bounds: Rect): Unit

Override this in your subclass to change appearance if you vary based on the bounds.

Parameters
bounds Rect: This value cannot be null.