EdgeEffect
public
class
EdgeEffect
extends Object
java.lang.Object | |
↳ | android.widget.EdgeEffect |
This class performs the graphical effect used at the edges of scrollable widgets when the user scrolls beyond the content bounds in 2D space.
EdgeEffect is stateful. Custom widgets using EdgeEffect should create an
instance for each edge that should show the effect, feed it input data using
the methods onAbsorb(int)
, onPull(float)
, and onRelease()
,
and draw the effect using draw(android.graphics.Canvas)
in the widget's overridden
View.draw(Canvas)
method. If isFinished()
returns
false after drawing, the edge effect's animation is not yet complete and the widget
should schedule another drawing pass to continue the animation.
When drawing, widgets should draw their main content and child views first,
usually by invoking super.draw(canvas)
from an overridden draw
method. (This will invoke onDraw and dispatch drawing to child views as needed.)
The edge effect may then be drawn on top of the view's content using the
draw(android.graphics.Canvas)
method.
Summary
Fields | |
---|---|
public
static
final
BlendMode |
DEFAULT_BLEND_MODE
The default blend mode used by |
Public constructors | |
---|---|
EdgeEffect(Context context)
Construct a new EdgeEffect with a theme appropriate for the provided context. |
|
EdgeEffect(Context context, AttributeSet attrs)
Construct a new EdgeEffect with a theme appropriate for the provided context. |
Public methods | |
---|---|
boolean
|
draw(Canvas canvas)
Draw into the provided canvas. |
void
|
finish()
Immediately finish the current animation. |
BlendMode
|
getBlendMode()
Returns the blend mode. |
int
|
getColor()
Return the color of this edge effect in argb. |
float
|
getDistance()
Returns the pull distance needed to be released to remove the showing effect. |
int
|
getMaxHeight()
Return the maximum height that the edge effect will be drawn at given the original
|
boolean
|
isFinished()
Reports if this EdgeEffect's animation is finished. |
void
|
onAbsorb(int velocity)
Call when the effect absorbs an impact at the given velocity. |
void
|
onPull(float deltaDistance)
A view should call this when content is pulled away from an edge by the user. |
void
|
onPull(float deltaDistance, float displacement)
A view should call this when content is pulled away from an edge by the user. |
float
|
onPullDistance(float deltaDistance, float displacement)
A view should call this when content is pulled away from an edge by the user. |
void
|
onRelease()
Call when the object is released after being pulled. |
void
|
setBlendMode(BlendMode blendmode)
Set or clear the blend mode. |
void
|
setColor(int color)
Set the color of this edge effect in argb. |
void
|
setSize(int width, int height)
Set the size of this edge effect in pixels. |
Inherited methods | |
---|---|
Fields
DEFAULT_BLEND_MODE
public static final BlendMode DEFAULT_BLEND_MODE
The default blend mode used by EdgeEffect
.
Public constructors
EdgeEffect
public EdgeEffect (Context context)
Construct a new EdgeEffect with a theme appropriate for the provided context.
Parameters | |
---|---|
context |
Context : Context used to provide theming and resource information for the EdgeEffect |
EdgeEffect
public EdgeEffect (Context context, AttributeSet attrs)
Construct a new EdgeEffect with a theme appropriate for the provided context.
Parameters | |
---|---|
context |
Context : Context used to provide theming and resource information for the EdgeEffect
This value cannot be null . |
attrs |
AttributeSet : The attributes of the XML tag that is inflating the view
This value may be null . |
Public methods
draw
public boolean draw (Canvas canvas)
Draw into the provided canvas. Assumes that the canvas has been rotated
accordingly and the size has been set. The effect will be drawn the full
width of X=0 to X=width, beginning from Y=0 and extending to some factor <
1.f of height. The effect will only be visible on a
hardware canvas, e.g. RenderNode.beginRecording()
.
Parameters | |
---|---|
canvas |
Canvas : Canvas to draw into |
Returns | |
---|---|
boolean |
true if drawing should continue beyond this frame to continue the animation |
finish
public void finish ()
Immediately finish the current animation.
After this call isFinished()
will return true.
getBlendMode
public BlendMode getBlendMode ()
Returns the blend mode. A blend mode defines how source pixels (generated by a drawing command) are composited with the destination pixels (content of the render target).
Returns | |
---|---|
BlendMode |
BlendMode
This value may be null . |
getColor
public int getColor ()
Return the color of this edge effect in argb.
Returns | |
---|---|
int |
The color of this edge effect in argb |
getDistance
public float getDistance ()
Returns the pull distance needed to be released to remove the showing effect.
It is determined by the onPull(float, float)
deltaDistance
and
any animating values, including from onAbsorb(int)
and onRelease()
.
This can be used in conjunction with onPullDistance(float, float)
to
release the currently showing effect.
Returns | |
---|---|
float |
The pull distance that must be released to remove the showing effect. |
getMaxHeight
public int getMaxHeight ()
Return the maximum height that the edge effect will be drawn at given the original
input size
.
Returns | |
---|---|
int |
The maximum height of the edge effect |
isFinished
public boolean isFinished ()
Reports if this EdgeEffect's animation is finished. If this method returns false
after a call to draw(android.graphics.Canvas)
the host widget should schedule another
drawing pass to continue the animation.
Returns | |
---|---|
boolean |
true if animation is finished, false if drawing should continue on the next frame. |
onAbsorb
public void onAbsorb (int velocity)
Call when the effect absorbs an impact at the given velocity. Used when a fling reaches the scroll boundary.
When using a Scroller
or OverScroller
,
the method getCurrVelocity
will provide a reasonable approximation
to use here.
Parameters | |
---|---|
velocity |
int : Velocity at impact in pixels per second. |
onPull
public void onPull (float deltaDistance)
A view should call this when content is pulled away from an edge by the user.
This will update the state of the current visual effect and its associated animation.
The host view should always View.invalidate()
after this
and draw the results accordingly.
Views using EdgeEffect should favor onPull(float, float)
when the displacement
of the pull point is known.
Parameters | |
---|---|
deltaDistance |
float : Change in distance since the last call. Values may be 0 (no change) to
1.f (full length of the view) or negative values to express change
back toward the edge reached to initiate the effect. |
onPull
public void onPull (float deltaDistance, float displacement)
A view should call this when content is pulled away from an edge by the user.
This will update the state of the current visual effect and its associated animation.
The host view should always View.invalidate()
after this
and draw the results accordingly.
Parameters | |
---|---|
deltaDistance |
float : Change in distance since the last call. Values may be 0 (no change) to
1.f (full length of the view) or negative values to express change
back toward the edge reached to initiate the effect. |
displacement |
float : The displacement from the starting side of the effect of the point
initiating the pull. In the case of touch this is the finger position.
Values may be from 0-1. |
onPullDistance
public float onPullDistance (float deltaDistance, float displacement)
A view should call this when content is pulled away from an edge by the user.
This will update the state of the current visual effect and its associated animation.
The host view should always View.invalidate()
after this
and draw the results accordingly. This works similarly to onPull(float, float)
,
but returns the amount of deltaDistance
that has been consumed. If the
getDistance()
is currently 0 and deltaDistance
is negative, this
function will return 0 and the drawn value will remain unchanged.
This method can be used to reverse the effect from a pull or absorb and partially consume
some of a motion:
if (deltaY < 0) { float consumed = edgeEffect.onPullDistance(deltaY / getHeight(), x / getWidth()); deltaY -= consumed * getHeight(); if (edgeEffect.getDistance() == 0f) edgeEffect.onRelease(); }
Parameters | |
---|---|
deltaDistance |
float : Change in distance since the last call. Values may be 0 (no change) to
1.f (full length of the view) or negative values to express change
back toward the edge reached to initiate the effect. |
displacement |
float : The displacement from the starting side of the effect of the point
initiating the pull. In the case of touch this is the finger position.
Values may be from 0-1. |
Returns | |
---|---|
float |
The amount of deltaDistance that was consumed, a number between
0 and deltaDistance . |
onRelease
public void onRelease ()
Call when the object is released after being pulled.
This will begin the "decay" phase of the effect. After calling this method
the host view should View.invalidate()
and thereby
draw the results accordingly.
setBlendMode
public void setBlendMode (BlendMode blendmode)
Set or clear the blend mode. A blend mode defines how source pixels (generated by a drawing command) are composited with the destination pixels (content of the render target).
Pass null to clear any previous blend mode.Parameters | |
---|---|
blendmode |
BlendMode : May be null. The blend mode to be installed in the paint |
See also:
setColor
public void setColor (int color)
Set the color of this edge effect in argb.
Parameters | |
---|---|
color |
int : Color in argb |
setSize
public void setSize (int width, int height)
Set the size of this edge effect in pixels.
Parameters | |
---|---|
width |
int : Effect width in pixels |
height |
int : Effect height in pixels |