Added in API level 28

AnimatedImageDrawable


open class AnimatedImageDrawable : Drawable, Animatable2

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
Unit applyTheme(t: Resources.Theme)

Applies the specified theme to this Drawable and its children.

Boolean canApplyTheme()

Unit clearColorFilter()

Removes the color filter for this drawable.

Rect copyBounds()

Return a copy of the drawable's bounds in a new Rect. This returns the same values as getBounds(), but the returned object is guaranteed to not be changed later by the drawable (i.e. it retains no reference to this rect). If the caller already has a Rect allocated, call copyBounds(rect).

Unit copyBounds(bounds: Rect)

Return a copy of the drawable's bounds in the specified Rect (allocated by the caller). The bounds specify where this will draw when its draw() method is called.

Drawable? createFromPath(pathName: String!)

Create a drawable from file path name.

Drawable? createFromResourceStream(res: Resources?, value: TypedValue?, is: InputStream?, srcName: String?)

Create a drawable from an inputstream, using the given resources and value to determine density information.

Drawable? createFromResourceStream(res: Resources?, value: TypedValue?, is: InputStream?, srcName: String?, opts: BitmapFactory.Options?)

Create a drawable from an inputstream, using the given resources and value to determine density information.

Drawable? createFromStream(is: InputStream?, srcName: String?)

Create a drawable from an inputstream

Drawable createFromXml(r: Resources, parser: XmlPullParser)

Create a drawable from an XML document. For more information on how to create resources in XML, see Drawable Resources.

Drawable createFromXml(r: Resources, parser: XmlPullParser, theme: Resources.Theme?)

Create a drawable from an XML document using an optional Theme. For more information on how to create resources in XML, see Drawable Resources.

Drawable createFromXmlInner(r: Resources, parser: XmlPullParser, attrs: AttributeSet)

Create from inside an XML document. Called on a parser positioned at a tag in an XML document, tries to create a Drawable from that tag. Returns null if the tag is not a valid drawable.

Drawable createFromXmlInner(r: Resources, parser: XmlPullParser, attrs: AttributeSet, theme: Resources.Theme?)

Create a drawable from inside an XML document using an optional Theme. Called on a parser positioned at a tag in an XML document, tries to create a Drawable from that tag. Returns null if the tag is not a valid drawable.

Rect getBounds()

Return the drawable's bounds Rect. Note: for efficiency, the returned object may be the same object stored in the drawable (though this is not guaranteed), so if a persistent copy of the bounds is needed, call copyBounds(rect) instead. You should also not change the object returned by this method as it may be the same object stored in the drawable.

Drawable.Callback? getCallback()

Return the current Callback implementation attached to this Drawable.

Int getChangingConfigurations()

Return a mask of the configuration parameters for which this drawable may change, requiring that it be re-created. The default implementation returns whatever was provided through setChangingConfigurations(int) or 0 by default. Subclasses may extend this to or in the changing configurations of any other drawables they hold.

Drawable.ConstantState? getConstantState()

Return a ConstantState instance that holds the shared state of this Drawable.

Drawable getCurrent()

Rect getDirtyBounds()

Return the drawable's dirty bounds Rect. Note: for efficiency, the returned object may be the same object stored in the drawable (though this is not guaranteed).

By default, this returns the full drawable bounds. Custom drawables may override this method to perform more precise invalidation.

Unit getHotspotBounds(outRect: Rect)

Populates outRect with the hotspot bounds.

Int getLayoutDirection()

Returns the resolved layout direction for this Drawable.

Int getLevel()

Retrieve the current level.

Int getMinimumHeight()

Returns the minimum height suggested by this Drawable. If a View uses this Drawable as a background, it is suggested that the View use at least this value for its height. (There will be some scenarios where this will not be possible.) This value should INCLUDE any padding.

Int getMinimumWidth()

Returns the minimum width suggested by this Drawable. If a View uses this Drawable as a background, it is suggested that the View use at least this value for its width. (There will be some scenarios where this will not be possible.) This value should INCLUDE any padding.

Insets getOpticalInsets()

Return in insets the layout insets suggested by this Drawable for use with alignment operations during layout.

Unit getOutline(outline: Outline)

Called to get the drawable to populate the Outline that defines its drawing area.

This method is called by the default android.view.ViewOutlineProvider to define the outline of the View.

The default behavior defines the outline to be the bounding rectangle of 0 alpha. Subclasses that wish to convey a different shape or alpha value must override this method.

Boolean getPadding(padding: Rect)

Return in padding the insets suggested by this Drawable for placing content inside the drawable's bounds. Positive values move toward the center of the Drawable (set Rect.inset).

IntArray getState()

Describes the current state, as a union of primitive states, such as android.R.attr#state_focused, android.R.attr#state_selected, etc. Some drawables may modify their imagery based on the selected state.

Region? getTransparentRegion()

Returns a Region representing the part of the Drawable that is completely transparent. This can be used to perform drawing operations, identifying which parts of the target will not change when rendering the Drawable. The default implementation returns null, indicating no transparent region; subclasses can optionally override this to return an actual Region if they want to supply this optimization information, but it is not required that they do so.

Boolean hasFocusStateSpecified()

Indicates whether this drawable has at least one state spec explicitly specifying android.R.attr#state_focused.

Note: A View uses a Drawable instance as its background and it changes its appearance based on a state. On keyboard devices, it should specify its android.R.attr#state_focused to make sure the user knows which view is holding the focus.

Unit inflate(r: Resources, parser: XmlPullParser, attrs: AttributeSet)

Inflate this Drawable from an XML resource. Does not apply a theme.

Unit invalidateSelf()

Use the current Callback implementation to have this Drawable redrawn. Does nothing if there is no Callback attached to the Drawable.

Boolean isProjected()

Whether this drawable requests projection. Indicates that the android.graphics.RenderNode this Drawable will draw into should be drawn immediately after the closest ancestor RenderNode containing a projection receiver.

Boolean isStateful()

Indicates whether this drawable will change its appearance based on state. Clients can use this to determine whether it is necessary to calculate their state and call setState.

Boolean isVisible()

Unit jumpToCurrentState()

If this Drawable does transition animations between states, ask that it immediately jump to the current state and skip any active animations.

Drawable mutate()

Make this drawable mutable. This operation cannot be reversed. A mutable drawable is guaranteed to not share its state with any other drawable. This is especially useful when you need to modify properties of drawables loaded from resources. By default, all drawables instances loaded from the same resource share a common state; if you modify the state of one instance, all the other instances will receive the same modification. Calling this method on a mutable Drawable will have no effect.

Boolean onLevelChange(level: Int)

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

Boolean onStateChange(state: IntArray)

Override this in your subclass to change appearance if you recognize the specified state.

Int resolveOpacity(op1: Int, op2: Int)

Return the appropriate opacity value for two source opacities. If either is UNKNOWN, that is returned; else, if either is TRANSLUCENT, that is returned; else, if either is TRANSPARENT, that is returned; else, OPAQUE is returned.

This is to help in implementing getOpacity.

Unit scheduleSelf(what: Runnable, when: Long)

Use the current Callback implementation to have this Drawable scheduled. Does nothing if there is no Callback attached to the Drawable.

Unit setBounds(bounds: Rect)

Specify a bounding rectangle for the Drawable. This is where the drawable will draw when its draw() method is called.

Unit setBounds(left: Int, top: Int, right: Int, bottom: Int)

Specify a bounding rectangle for the Drawable. This is where the drawable will draw when its draw() method is called.

Unit setCallback(cb: Drawable.Callback?)

Bind a Callback object to this Drawable. Required for clients that want to support animated drawables.

Unit setChangingConfigurations(configs: Int)

Set a mask of the configuration parameters for which this drawable may change, requiring that it be re-created.

Unit setColorFilter(color: Int, mode: PorterDuff.Mode)

Specify a color and Porter-Duff mode to be the color filter for this drawable.

Convenience for setColorFilter(android.graphics.ColorFilter) which constructs a PorterDuffColorFilter.

Note: Setting a color filter disables tint.

Unit setDither(dither: Boolean)

Set to true to have the drawable dither its colors when drawn to a device with fewer than 8-bits per color component.

Unit setHotspot(x: Float, y: Float)

Specifies the hotspot's location within the drawable.

Unit setHotspotBounds(left: Int, top: Int, right: Int, bottom: Int)

Sets the bounds to which the hotspot is constrained, if they should be different from the drawable bounds.

Boolean setLayoutDirection(layoutDirection: Int)

Set the layout direction for this drawable. Should be a resolved layout direction, as the Drawable has no capacity to do the resolution on its own.

Boolean setLevel(level: Int)

Specify the level for the drawable. This allows a drawable to vary its imagery based on a continuous controller, for example to show progress or volume level.

If the new level you are supplying causes the appearance of the Drawable to change, then it is responsible for calling invalidateSelf in order to have itself redrawn, and true will be returned from this function.

Boolean setState(stateSet: IntArray)

Specify a set of states for the drawable. These are use-case specific, so see the relevant documentation. As an example, the background for widgets like Button understand the following states: [android.R.attr#state_focused, android.R.attr#state_pressed].

If the new state you are supplying causes the appearance of the Drawable to change, then it is responsible for calling invalidateSelf in order to have itself redrawn, and true will be returned from this function.

Note: The Drawable holds a reference on to stateSet until a new state array is given to it, so you must not modify this array during that time.

Unit setTint(tintColor: Int)

Specifies tint color for this drawable.

A Drawable's drawing content will be blended together with its tint before it is drawn to the screen. This functions similarly to setColorFilter(int,android.graphics.PorterDuff.Mode).

To clear the tint, pass null to setTintList(android.content.res.ColorStateList).

Note: Setting a color filter via setColorFilter(android.graphics.ColorFilter) or setColorFilter(int,android.graphics.PorterDuff.Mode) overrides tint.

Unit setTintBlendMode(blendMode: BlendMode?)

Specifies a tint blending mode for this drawable.

Defines how this drawable's tint color should be blended into the drawable before it is drawn to screen. Default tint mode is BlendMode.SRC_IN.

Note: Setting a color filter via setColorFilter(android.graphics.ColorFilter)

Unit setTintList(tint: ColorStateList?)

Specifies tint color for this drawable as a color state list.

A Drawable's drawing content will be blended together with its tint before it is drawn to the screen. This functions similarly to setColorFilter(int,android.graphics.PorterDuff.Mode).

Note: Setting a color filter via setColorFilter(android.graphics.ColorFilter) or setColorFilter(int,android.graphics.PorterDuff.Mode) overrides tint.

Unit setTintMode(tintMode: PorterDuff.Mode?)

Specifies a tint blending mode for this drawable.

Defines how this drawable's tint color should be blended into the drawable before it is drawn to screen. Default tint mode is PorterDuff.Mode.SRC_IN.

Note: Setting a color filter via setColorFilter(android.graphics.ColorFilter) or setColorFilter(int,android.graphics.PorterDuff.Mode) overrides tint.

Boolean setVisible(visible: Boolean, restart: Boolean)

Set whether this Drawable is visible. This generally does not impact the Drawable's behavior, but is a hint that can be used by some Drawables, for example, to decide whether run animations.

Unit unscheduleSelf(what: Runnable)

Use the current Callback implementation to have this Drawable unscheduled. Does nothing if there is no Callback attached to the Drawable.

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.

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.