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

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

open ColorFilter?

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

open Int

open Int

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?)

Boolean

open Boolean

open Boolean

Return whether the animation is currently running.

open Boolean
onLayoutDirectionChanged(layoutDirection: Int)

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

open Unit
setColorFilter(colorFilter: ColorFilter?)

Specify an optional color filter for the drawable.

open Unit
setFilterBitmap(filterBitmap: Boolean)

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

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

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
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
Return
Int the intrinsic height, or -1 if no intrinsic height

getIntrinsicWidth

Added in API level 28
open fun getIntrinsicWidth(): Int
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 android.graphics.PixelFormat#UNKNOWN, android.graphics.PixelFormat#TRANSLUCENT, android.graphics.PixelFormat#TRANSPARENT, or android.graphics.PixelFormat#OPAQUE

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

isAutoMirrored

Added in API level 28
fun isAutoMirrored(): Boolean
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
Parameters
layoutDirection Int: the new resolved layout direction Value is android.view.View#LAYOUT_DIRECTION_LTR, or android.view.View#LAYOUT_DIRECTION_RTL
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
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

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
Parameters
bounds Rect: This value cannot be null.