to top
Android APIs
public class

ClipDrawable

extends Drawable
implements Drawable.Callback
java.lang.Object
   ↳ android.graphics.drawable.Drawable
     ↳ android.graphics.drawable.ClipDrawable

Class Overview

A Drawable that clips another Drawable based on this Drawable's current level value. You can control how much the child Drawable gets clipped in width and height based on the level, as well as a gravity to control where it is placed in its overall container. Most often used to implement things like progress bars, by increasing the drawable's level with setLevel().

Note: The drawable is clipped completely and not visible when the level is 0 and fully revealed when the level is 10,000.

It can be defined in an XML file with the <clip> element. For more information, see the guide to Drawable Resources.

Summary

XML Attributes
Attribute Name Related Method Description
android:clipOrientation The orientation for the clip. 
android:drawable Reference to a drawable resource to draw with the specified scale. 
android:gravity Specifies where to clip within the drawable. 
Constants
int HORIZONTAL
int VERTICAL
Public Constructors
ClipDrawable(Drawable drawable, int gravity, int orientation)
Public Methods
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 getChangingConfigurations()
Return a mask of the configuration parameters for which this drawable may change, requiring that it be re-created.
Drawable.ConstantState getConstantState()
Return a Drawable.ConstantState instance that holds the shared state of this Drawable.
int getIntrinsicHeight()
Return the intrinsic height of the underlying drawable object.
int getIntrinsicWidth()
Return the intrinsic width of the underlying drawable object.
int getOpacity()
Return the opacity/transparency of this Drawable.
boolean getPadding(Rect padding)
Return in padding the insets suggested by this Drawable for placing content inside the drawable's bounds.
void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
Inflate this Drawable from an XML resource.
void invalidateDrawable(Drawable who)
Called when the drawable needs to be redrawn.
boolean isStateful()
Indicates whether this view will change its appearance based on state.
void scheduleDrawable(Drawable who, Runnable what, long when)
A Drawable can call this to schedule the next frame of its animation.
void setAlpha(int alpha)
Specify an alpha value for the drawable.
void setColorFilter(ColorFilter cf)
Specify an optional colorFilter for the drawable.
boolean setVisible(boolean visible, boolean restart)
Set whether this Drawable is visible.
void unscheduleDrawable(Drawable who, Runnable what)
A Drawable can call this to unschedule an action previously scheduled with scheduleDrawable(Drawable, Runnable, long).
Protected Methods
void onBoundsChange(Rect bounds)
Override this in your subclass to change appearance if you recognize the specified state.
boolean onLevelChange(int level)
Override this in your subclass to change appearance if you vary based on level.
boolean onStateChange(int[] state)
Override this in your subclass to change appearance if you recognize the specified state.
[Expand]
Inherited Methods
From class android.graphics.drawable.Drawable
From class java.lang.Object
From interface android.graphics.drawable.Drawable.Callback

XML Attributes

android:clipOrientation

The orientation for the clip.

Must be one or more (separated by '|') of the following constant values.

ConstantValueDescription
horizontal1 Clip the drawable horizontally.
vertical2 Clip the drawable vertically.

This corresponds to the global attribute resource symbol clipOrientation.

Related Methods

android:drawable

Reference to a drawable resource to draw with the specified scale.

Must be a reference to another resource, in the form "@[+][package:]type:name" or to a theme attribute in the form "?[package:][type:]name".

This corresponds to the global attribute resource symbol drawable.

Related Methods

android:gravity

Specifies where to clip within the drawable. The default value is left.

Must be one or more (separated by '|') of the following constant values.

ConstantValueDescription
top0x30 Push object to the top of its container, not changing its size.
bottom0x50 Push object to the bottom of its container, not changing its size.
left0x03 Push object to the left of its container, not changing its size.
right0x05 Push object to the right of its container, not changing its size.
center_vertical0x10 Place object in the vertical center of its container, not changing its size.
fill_vertical0x70 Grow the vertical size of the object if needed so it completely fills its container.
center_horizontal0x01 Place object in the horizontal center of its container, not changing its size.
fill_horizontal0x07 Grow the horizontal size of the object if needed so it completely fills its container.
center0x11 Place the object in the center of its container in both the vertical and horizontal axis, not changing its size.
fill0x77 Grow the horizontal and vertical size of the object if needed so it completely fills its container.
clip_vertical0x80 Additional option that can be set to have the top and/or bottom edges of the child clipped to its container's bounds. The clip will be based on the vertical gravity: a top gravity will clip the bottom edge, a bottom gravity will clip the top edge, and neither will clip both edges.
clip_horizontal0x08 Additional option that can be set to have the left and/or right edges of the child clipped to its container's bounds. The clip will be based on the horizontal gravity: a left gravity will clip the right edge, a right gravity will clip the left edge, and neither will clip both edges.
start0x00800003 Push object to the beginning of its container, not changing its size.
end0x00800005 Push object to the end of its container, not changing its size.

This corresponds to the global attribute resource symbol gravity.

Related Methods

Constants

public static final int HORIZONTAL

Since: API Level 1

Constant Value: 1 (0x00000001)

public static final int VERTICAL

Since: API Level 1

Constant Value: 2 (0x00000002)

Public Constructors

public ClipDrawable (Drawable drawable, int gravity, int orientation)

Since: API Level 1

Parameters
orientation Bitwise-or of HORIZONTAL and/or VERTICAL

Public Methods

public void draw (Canvas canvas)

Since: API Level 1

Draw in its bounds (set via setBounds) respecting optional effects such as alpha (set via setAlpha) and color filter (set via setColorFilter).

Parameters
canvas The canvas to draw into

public int getChangingConfigurations ()

Since: API Level 1

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.

Returns
  • Returns a mask of the changing configuration parameters, as defined by Configuration.

public Drawable.ConstantState getConstantState ()

Since: API Level 1

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

Returns
  • The ConstantState associated to that Drawable.

public int getIntrinsicHeight ()

Since: API Level 1

Return the intrinsic height of the underlying drawable object. Returns -1 if it has no intrinsic height, such as with a solid color.

public int getIntrinsicWidth ()

Since: API Level 1

Return the intrinsic width of the underlying drawable object. Returns -1 if it has no intrinsic width, such as with a solid color.

public int getOpacity ()

Since: API Level 1

Return the opacity/transparency of this Drawable. The returned value is one of the abstract format constants in PixelFormat: UNKNOWN, TRANSLUCENT, TRANSPARENT, or OPAQUE.

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 take into account a custom alpha or color filter that has been applied by the client through the setAlpha(int) or setColorFilter(ColorFilter) methods.

Returns
  • int The opacity class of the Drawable.

public boolean getPadding (Rect padding)

Since: API Level 1

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). Returns true if this drawable actually has a padding, else false. When false is returned, the padding is always set to 0.

public void inflate (Resources r, XmlPullParser parser, AttributeSet attrs)

Since: API Level 1

Inflate this Drawable from an XML resource.

public void invalidateDrawable (Drawable who)

Since: API Level 1

Called when the drawable needs to be redrawn. A view at this point should invalidate itself (or at least the part of itself where the drawable appears).

Parameters
who The drawable that is requesting the update.

public boolean isStateful ()

Since: API Level 1

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

Returns
  • True if this view changes its appearance based on state, false otherwise.

public void scheduleDrawable (Drawable who, Runnable what, long when)

Since: API Level 1

A Drawable can call this to schedule the next frame of its animation. An implementation can generally simply call postAtTime(Runnable, Object, long) with the parameters (what, who, when) to perform the scheduling.

Parameters
who The drawable being scheduled.
what The action to execute.
when The time (in milliseconds) to run. The timebase is uptimeMillis()

public void setAlpha (int alpha)

Since: API Level 1

Specify an alpha value for the drawable. 0 means fully transparent, and 255 means fully opaque.

public void setColorFilter (ColorFilter cf)

Since: API Level 1

Specify an optional colorFilter for the drawable. Pass null to remove any filters.

public boolean setVisible (boolean visible, boolean restart)

Since: API Level 1

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.

Parameters
visible Set to true if visible, false if not.
restart You can supply true here to force the drawable to behave as if it has just become visible, even if it had last been set visible. Used for example to force animations to restart.
Returns
  • boolean Returns true if the new visibility is different than its previous state.

public void unscheduleDrawable (Drawable who, Runnable what)

Since: API Level 1

A Drawable can call this to unschedule an action previously scheduled with scheduleDrawable(Drawable, Runnable, long). An implementation can generally simply call removeCallbacks(Runnable, Object) with the parameters (what, who) to unschedule the drawable.

Parameters
who The drawable being unscheduled.
what The action being unscheduled.

Protected Methods

protected void onBoundsChange (Rect bounds)

Since: API Level 1

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

protected boolean onLevelChange (int level)

Since: API Level 1

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

Returns
  • Returns true if the level change has caused the appearance of the Drawable to change (that is, it needs to be drawn), else false if it looks the same and there is no need to redraw it since its last level.

protected boolean onStateChange (int[] state)

Since: API Level 1

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

Returns
  • Returns true if the state change has caused the appearance of the Drawable to change (that is, it needs to be drawn), else false if it looks the same and there is no need to redraw it since its last state.