Canvaspublic class Canvas extends Object The Canvas class holds the "draw" calls. To draw something, you need
4 basic components: A Bitmap to hold the pixels, a Canvas to host
the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect,
Path, text, Bitmap), and a paint (to describe the colors and styles for the
drawing). |
Fields Summary |
---|
final int | mNativeCanvas | private Bitmap | mBitmap | private javax.microedition.khronos.opengles.GL | mGL | private DrawFilter | mDrawFilter | private int | mSurfaceFormat | private float | mDensityScale | public static final int | MATRIX_SAVE_FLAGrestore the current matrix when restore() is called | public static final int | CLIP_SAVE_FLAGrestore the current clip when restore() is called | public static final int | HAS_ALPHA_LAYER_SAVE_FLAGthe layer needs to per-pixel alpha | public static final int | FULL_COLOR_LAYER_SAVE_FLAGthe layer needs to 8-bits per color component | public static final int | CLIP_TO_LAYER_SAVE_FLAGclip against the layer's bounds | public static final int | ALL_SAVE_FLAGrestore everything when restore() is called |
Constructors Summary |
---|
public Canvas()Construct an empty raster canvas. Use setBitmap() to specify a bitmap to
draw into.
// 0 means no native bitmap
mNativeCanvas = initRaster(0);
| public Canvas(Bitmap bitmap)Construct a canvas with the specified bitmap to draw into. The bitmap
must be mutable.
if (!bitmap.isMutable()) {
throw new IllegalStateException(
"Immutable bitmap passed to Canvas constructor");
}
throwIfRecycled(bitmap);
mNativeCanvas = initRaster(bitmap.ni());
mBitmap = bitmap;
mDensityScale = bitmap.getDensityScale();
if (mDensityScale == Bitmap.DENSITY_SCALE_UNKNOWN) mDensityScale = 1.0f;
| Canvas(int nativeCanvas)
if (nativeCanvas == 0) {
throw new IllegalStateException();
}
mNativeCanvas = nativeCanvas;
| public Canvas(javax.microedition.khronos.opengles.GL gl)Construct a canvas with the specified gl context. All drawing through
this canvas will be redirected to OpenGL. Note: some features may not
be supported in this mode (e.g. some GL implementations may not support
antialiasing or certain effects like ColorMatrix or certain Xfermodes).
However, no exception will be thrown in those cases.
mNativeCanvas = initGL();
mGL = gl;
|
Methods Summary |
---|
private static void | checkRange(int length, int offset, int count)
if ((offset | count) < 0 || offset + count > length) {
throw new ArrayIndexOutOfBoundsException();
}
| public boolean | clipPath(Path path, Region.Op op)Modify the current clip with the specified path.
return native_clipPath(mNativeCanvas, path.ni(), op.nativeInt);
| public boolean | clipPath(Path path)Intersect the current clip with the specified path.
return clipPath(path, Region.Op.INTERSECT);
| public boolean | clipRect(RectF rect, Region.Op op)Modify the current clip with the specified rectangle.
return native_clipRect(mNativeCanvas,
rect.left, rect.top, rect.right, rect.bottom,
op.nativeInt);
| public boolean | clipRect(Rect rect, Region.Op op)Modify the current clip with the specified rectangle, which is
expressed in local coordinates.
return native_clipRect(mNativeCanvas,
rect.left, rect.top, rect.right, rect.bottom,
op.nativeInt);
| public native boolean | clipRect(RectF rect)Intersect the current clip with the specified rectangle, which is
expressed in local coordinates.
| public native boolean | clipRect(Rect rect)Intersect the current clip with the specified rectangle, which is
expressed in local coordinates.
| public boolean | clipRect(float left, float top, float right, float bottom, Region.Op op)Modify the current clip with the specified rectangle, which is
expressed in local coordinates.
return native_clipRect(mNativeCanvas, left, top, right, bottom,
op.nativeInt);
| public native boolean | clipRect(float left, float top, float right, float bottom)Intersect the current clip with the specified rectangle, which is
expressed in local coordinates.
| public native boolean | clipRect(int left, int top, int right, int bottom)Intersect the current clip with the specified rectangle, which is
expressed in local coordinates.
| public boolean | clipRegion(Region region, Region.Op op)Modify the current clip with the specified region. Note that unlike
clipRect() and clipPath() which transform their arguments by the
current matrix, clipRegion() assumes its argument is already in the
coordinate system of the current layer's bitmap, and so not
transformation is performed.
return native_clipRegion(mNativeCanvas, region.ni(), op.nativeInt);
| public boolean | clipRegion(Region region)Intersect the current clip with the specified region. Note that unlike
clipRect() and clipPath() which transform their arguments by the
current matrix, clipRegion() assumes its argument is already in the
coordinate system of the current layer's bitmap, and so not
transformation is performed.
return clipRegion(region, Region.Op.INTERSECT);
| public void | concat(Matrix matrix)Preconcat the current matrix with the specified matrix.
native_concat(mNativeCanvas, matrix.native_instance);
| public void | drawARGB(int a, int r, int g, int b)Fill the entire canvas' bitmap (restricted to the current clip) with the
specified ARGB color, using srcover porterduff mode.
native_drawARGB(mNativeCanvas, a, r, g, b);
| public void | drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)Draw the specified arc, which will be scaled to fit inside the
specified oval. If the sweep angle is >= 360, then the oval is drawn
completely. Note that this differs slightly from SkPath::arcTo, which
treats the sweep angle mod 360.
if (oval == null) {
throw new NullPointerException();
}
native_drawArc(mNativeCanvas, oval, startAngle, sweepAngle,
useCenter, paint.mNativePaint);
| public void | drawBitmap(Bitmap bitmap, float left, float top, Paint paint)Draw the specified bitmap, with its top/left corner at (x,y), using
the specified paint, transformed by the current matrix.
Note: if the paint contains a maskfilter that generates a mask which
extends beyond the bitmap's original width/height (e.g. BlurMaskFilter),
then the bitmap will be drawn as if it were in a Shader with CLAMP mode.
Thus the color outside of the original width/height will be the edge
color replicated.
throwIfRecycled(bitmap);
native_drawBitmap(mNativeCanvas, bitmap.ni(), left, top,
paint != null ? paint.mNativePaint : 0, bitmap.isAutoScalingEnabled(),
bitmap.getDensityScale());
| public void | drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)Draw the specified bitmap, scaling/translating automatically to fill
the destination rectangle. If the source rectangle is not null, it
specifies the subset of the bitmap to draw.
Note: if the paint contains a maskfilter that generates a mask which
extends beyond the bitmap's original width/height (e.g. BlurMaskFilter),
then the bitmap will be drawn as if it were in a Shader with CLAMP mode.
Thus the color outside of the original width/height will be the edge
color replicated.
if (dst == null) {
throw new NullPointerException();
}
throwIfRecycled(bitmap);
native_drawBitmap(mNativeCanvas, bitmap.ni(), src, dst,
paint != null ? paint.mNativePaint : 0);
| public void | drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)Draw the specified bitmap, scaling/translating automatically to fill
the destination rectangle. If the source rectangle is not null, it
specifies the subset of the bitmap to draw.
Note: if the paint contains a maskfilter that generates a mask which
extends beyond the bitmap's original width/height (e.g. BlurMaskFilter),
then the bitmap will be drawn as if it were in a Shader with CLAMP mode.
Thus the color outside of the original width/height will be the edge
color replicated.
if (dst == null) {
throw new NullPointerException();
}
throwIfRecycled(bitmap);
native_drawBitmap(mNativeCanvas, bitmap.ni(), src, dst,
paint != null ? paint.mNativePaint : 0);
| public void | drawBitmap(int[] colors, int offset, int stride, float x, float y, int width, int height, boolean hasAlpha, Paint paint)Treat the specified array of colors as a bitmap, and draw it. This gives
the same result as first creating a bitmap from the array, and then
drawing it, but this method avoids explicitly creating a bitmap object
which can be more efficient if the colors are changing often.
// check for valid input
if (width < 0) {
throw new IllegalArgumentException("width must be >= 0");
}
if (height < 0) {
throw new IllegalArgumentException("height must be >= 0");
}
if (Math.abs(stride) < width) {
throw new IllegalArgumentException("abs(stride) must be >= width");
}
int lastScanline = offset + (height - 1) * stride;
int length = colors.length;
if (offset < 0 || (offset + width > length) || lastScanline < 0
|| (lastScanline + width > length)) {
throw new ArrayIndexOutOfBoundsException();
}
// quick escape if there's nothing to draw
if (width == 0 || height == 0) {
return;
}
// punch down to native for the actual draw
native_drawBitmap(mNativeCanvas, colors, offset, stride, x, y, width, height, hasAlpha,
paint != null ? paint.mNativePaint : 0);
| public void | drawBitmap(int[] colors, int offset, int stride, int x, int y, int width, int height, boolean hasAlpha, Paint paint)Legacy version of drawBitmap(int[] colors, ...) that took ints for x,y
// call through to the common float version
drawBitmap(colors, offset, stride, (float)x, (float)y, width, height,
hasAlpha, paint);
| public void | drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)Draw the bitmap using the specified matrix.
nativeDrawBitmapMatrix(mNativeCanvas, bitmap.ni(), matrix.ni(),
paint != null ? paint.mNativePaint : 0);
| public void | drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)Draw the bitmap through the mesh, where mesh vertices are evenly
distributed across the bitmap. There are meshWidth+1 vertices across, and
meshHeight+1 vertices down. The verts array is accessed in row-major
order, so that the first meshWidth+1 vertices are distributed across the
top of the bitmap from left to right. A more general version of this
methid is drawVertices().
if ((meshWidth | meshHeight | vertOffset | colorOffset) < 0) {
throw new ArrayIndexOutOfBoundsException();
}
if (meshWidth == 0 || meshHeight == 0) {
return;
}
int count = (meshWidth + 1) * (meshHeight + 1);
// we mul by 2 since we need two floats per vertex
checkRange(verts.length, vertOffset, count * 2);
if (colors != null) {
// no mul by 2, since we need only 1 color per vertex
checkRange(colors.length, colorOffset, count);
}
nativeDrawBitmapMesh(mNativeCanvas, bitmap.ni(), meshWidth, meshHeight,
verts, vertOffset, colors, colorOffset,
paint != null ? paint.mNativePaint : 0);
| public void | drawCircle(float cx, float cy, float radius, Paint paint)Draw the specified circle using the specified paint. If radius is <= 0,
then nothing will be drawn. The circle will be filled or framed based
on the Style in the paint.
native_drawCircle(mNativeCanvas, cx, cy, radius,
paint.mNativePaint);
| public void | drawColor(int color)Fill the entire canvas' bitmap (restricted to the current clip) with the
specified color, using srcover porterduff mode.
native_drawColor(mNativeCanvas, color);
| public void | drawColor(int color, PorterDuff.Mode mode)Fill the entire canvas' bitmap (restricted to the current clip) with the
specified color and porter-duff xfermode.
native_drawColor(mNativeCanvas, color, mode.nativeInt);
| public void | drawLine(float startX, float startY, float stopX, float stopY, Paint paint)Draw a line segment with the specified start and stop x,y coordinates,
using the specified paint. NOTE: since a line is always "framed", the
Style is ignored in the paint.
native_drawLine(mNativeCanvas, startX, startY, stopX, stopY,
paint.mNativePaint);
| public native void | drawLines(float[] pts, int offset, int count, Paint paint)Draw a series of lines. Each line is taken from 4 consecutive values
in the pts array. Thus to draw 1 line, the array must contain at least 4
values. This is logically the same as drawing the array as follows:
drawLine(pts[0], pts[1], pts[2], pts[3]) followed by
drawLine(pts[4], pts[5], pts[6], pts[7]) and so on.
| public void | drawLines(float[] pts, Paint paint)
drawLines(pts, 0, pts.length, paint);
| public void | drawOval(RectF oval, Paint paint)Draw the specified oval using the specified paint. The oval will be
filled or framed based on the Style in the paint.
if (oval == null) {
throw new NullPointerException();
}
native_drawOval(mNativeCanvas, oval, paint.mNativePaint);
| public void | drawPaint(Paint paint)Fill the entire canvas' bitmap (restricted to the current clip) with
the specified paint. This is equivalent (but faster) to drawing an
infinitely large rectangle with the specified paint.
native_drawPaint(mNativeCanvas, paint.mNativePaint);
| public void | drawPath(Path path, Paint paint)Draw the specified path using the specified paint. The path will be
filled or framed based on the Style in the paint.
native_drawPath(mNativeCanvas, path.ni(), paint.mNativePaint);
| public void | drawPicture(Picture picture)Save the canvas state, draw the picture, and restore the canvas state.
This differs from picture.draw(canvas), which does not perform any
save/restore.
picture.endRecording();
native_drawPicture(mNativeCanvas, picture.ni());
| public void | drawPicture(Picture picture, RectF dst)Draw the picture, stretched to fit into the dst rectangle.
save();
translate(dst.left, dst.top);
if (picture.getWidth() > 0 && picture.getHeight() > 0) {
scale(dst.width() / picture.getWidth(),
dst.height() / picture.getHeight());
}
drawPicture(picture);
restore();
| public void | drawPicture(Picture picture, Rect dst)Draw the picture, stretched to fit into the dst rectangle.
save();
translate(dst.left, dst.top);
if (picture.getWidth() > 0 && picture.getHeight() > 0) {
scale((float)dst.width() / picture.getWidth(),
(float)dst.height() / picture.getHeight());
}
drawPicture(picture);
restore();
| public native void | drawPoint(float x, float y, Paint paint)Helper for drawPoints() for drawing a single point.
| public native void | drawPoints(float[] pts, int offset, int count, Paint paint)Draw a series of points. Each point is centered at the coordinate
specified by pts[], and its diameter is specified by the paint's stroke
width (as transformed by the canvas' CTM), with special treatment for
a stroke width of 0, which always draws exactly 1 pixel (or at most 4
if antialiasing is enabled). The shape of the point is controlled by
the paint's Cap type. The shape is a square, unless the cap type is
Round, in which case the shape is a circle.
| public void | drawPoints(float[] pts, Paint paint)Helper for drawPoints() that assumes you want to draw the entire array
drawPoints(pts, 0, pts.length, paint);
| public void | drawPosText(char[] text, int index, int count, float[] pos, Paint paint)Draw the text in the array, with each character's origin specified by
the pos array.
if (index < 0 || index + count > text.length || count*2 > pos.length) {
throw new IndexOutOfBoundsException();
}
native_drawPosText(mNativeCanvas, text, index, count, pos,
paint.mNativePaint);
| public void | drawPosText(java.lang.String text, float[] pos, Paint paint)Draw the text in the array, with each character's origin specified by
the pos array.
if (text.length()*2 > pos.length) {
throw new ArrayIndexOutOfBoundsException();
}
native_drawPosText(mNativeCanvas, text, pos, paint.mNativePaint);
| public void | drawRGB(int r, int g, int b)Fill the entire canvas' bitmap (restricted to the current clip) with the
specified RGB color, using srcover porterduff mode.
native_drawRGB(mNativeCanvas, r, g, b);
| public void | drawRect(RectF rect, Paint paint)Draw the specified Rect using the specified paint. The rectangle will
be filled or framed based on the Style in the paint.
native_drawRect(mNativeCanvas, rect, paint.mNativePaint);
| public void | drawRect(Rect r, Paint paint)Draw the specified Rect using the specified Paint. The rectangle
will be filled or framed based on the Style in the paint.
drawRect(r.left, r.top, r.right, r.bottom, paint);
| public void | drawRect(float left, float top, float right, float bottom, Paint paint)Draw the specified Rect using the specified paint. The rectangle will
be filled or framed based on the Style in the paint.
native_drawRect(mNativeCanvas, left, top, right, bottom,
paint.mNativePaint);
| public void | drawRoundRect(RectF rect, float rx, float ry, Paint paint)Draw the specified round-rect using the specified paint. The roundrect
will be filled or framed based on the Style in the paint.
if (rect == null) {
throw new NullPointerException();
}
native_drawRoundRect(mNativeCanvas, rect, rx, ry,
paint.mNativePaint);
| public void | drawText(char[] text, int index, int count, float x, float y, Paint paint)Draw the text, with origin at (x,y), using the specified paint. The
origin is interpreted based on the Align setting in the paint.
if ((index | count | (index + count) |
(text.length - index - count)) < 0) {
throw new IndexOutOfBoundsException();
}
native_drawText(mNativeCanvas, text, index, count, x, y,
paint.mNativePaint);
| public native void | drawText(java.lang.String text, float x, float y, Paint paint)Draw the text, with origin at (x,y), using the specified paint. The
origin is interpreted based on the Align setting in the paint.
| public void | drawText(java.lang.String text, int start, int end, float x, float y, Paint paint)Draw the text, with origin at (x,y), using the specified paint.
The origin is interpreted based on the Align setting in the paint.
if ((start | end | (end - start) | (text.length() - end)) < 0) {
throw new IndexOutOfBoundsException();
}
native_drawText(mNativeCanvas, text, start, end, x, y,
paint.mNativePaint);
| public void | drawText(java.lang.CharSequence text, int start, int end, float x, float y, Paint paint)Draw the specified range of text, specified by start/end, with its
origin at (x,y), in the specified Paint. The origin is interpreted
based on the Align setting in the Paint.
if (text instanceof String || text instanceof SpannedString ||
text instanceof SpannableString) {
native_drawText(mNativeCanvas, text.toString(), start, end, x, y,
paint.mNativePaint);
}
else if (text instanceof GraphicsOperations) {
((GraphicsOperations) text).drawText(this, start, end, x, y,
paint);
}
else {
char[] buf = TemporaryBuffer.obtain(end - start);
TextUtils.getChars(text, start, end, buf, 0);
drawText(buf, 0, end - start, x, y, paint);
TemporaryBuffer.recycle(buf);
}
| public void | drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)Draw the text, with origin at (x,y), using the specified paint, along
the specified path. The paint's Align setting determins where along the
path to start the text.
if (index < 0 || index + count > text.length) {
throw new ArrayIndexOutOfBoundsException();
}
native_drawTextOnPath(mNativeCanvas, text, index, count,
path.ni(), hOffset, vOffset,
paint.mNativePaint);
| public void | drawTextOnPath(java.lang.String text, Path path, float hOffset, float vOffset, Paint paint)Draw the text, with origin at (x,y), using the specified paint, along
the specified path. The paint's Align setting determins where along the
path to start the text.
if (text.length() > 0) {
native_drawTextOnPath(mNativeCanvas, text, path.ni(),
hOffset, vOffset, paint.mNativePaint);
}
| public void | drawVertices(android.graphics.Canvas$VertexMode mode, int vertexCount, float[] verts, int vertOffset, float[] texs, int texOffset, int[] colors, int colorOffset, short[] indices, int indexOffset, int indexCount, Paint paint)Draw the array of vertices, interpreted as triangles (based on mode). The
verts array is required, and specifies the x,y pairs for each vertex. If
texs is non-null, then it is used to specify the coordinate in shader
coordinates to use at each vertex (the paint must have a shader in this
case). If there is no texs array, but there is a color array, then each
color is interpolated across its corresponding triangle in a gradient. If
both texs and colors arrays are present, then they behave as before, but
the resulting color at each pixels is the result of multiplying the
colors from the shader and the color-gradient together. The indices array
is optional, but if it is present, then it is used to specify the index
of each triangle, rather than just walking through the arrays in order.
checkRange(verts.length, vertOffset, vertexCount);
if (texs != null) {
checkRange(texs.length, texOffset, vertexCount);
}
if (colors != null) {
checkRange(colors.length, colorOffset, vertexCount);
}
if (indices != null) {
checkRange(indices.length, indexOffset, indexCount);
}
nativeDrawVertices(mNativeCanvas, mode.nativeInt, vertexCount, verts,
vertOffset, texs, texOffset, colors, colorOffset,
indices, indexOffset, indexCount, paint.mNativePaint);
| protected void | finalize()
super.finalize();
finalizer(mNativeCanvas);
| private static native void | finalizer(int nativeCanvas)
| public static native void | freeGlCaches()Call this to free up OpenGL resources that may be cached or allocated
on behalf of the Canvas. Any subsequent drawing with a GL-backed Canvas
will have to recreate those resources.
| public boolean | getClipBounds(Rect bounds)Retrieve the clip bounds, returning true if they are non-empty.
return native_getClipBounds(mNativeCanvas, bounds);
| public final Rect | getClipBounds()Retrieve the clip bounds.
Rect r = new Rect();
getClipBounds(r);
return r;
| public float | getDensityScale()Returns the density scale for this Canvas' backing bitmap, expressed as a
factor of the default density (160dpi.) For instance, a bitmap designed for
240dpi displays will have a density scale of 1.5 whereas a bitmap
designed for 160dpi will have a density scale of 1.0.
The default density scale is {@link Bitmap#DENSITY_SCALE_UNKNOWN}.
if (mBitmap != null) {
return mBitmap.getDensityScale();
}
return mDensityScale;
| public DrawFilter | getDrawFilter()
return mDrawFilter;
| public javax.microedition.khronos.opengles.GL | getGL()Return the GL object associated with this canvas, or null if it is not
backed by GL.
return mGL;
| public native int | getHeight()Returns the height of the current drawing layer
| public void | getMatrix(Matrix ctm)Return, in ctm, the current transformation matrix. This does not alter
the matrix in the canvas, but just returns a copy of it.
native_getCTM(mNativeCanvas, ctm.native_instance);
| public final Matrix | getMatrix()Return a new matrix with a copy of the canvas' current transformation
matrix.
Matrix m = new Matrix();
getMatrix(m);
return m;
| public native int | getSaveCount()Returns the number of matrix/clip states on the Canvas' private stack.
This will equal # save() calls - # restore() calls.
| public native int | getWidth()Returns the width of the current drawing layer
| private static native int | initGL()
| private static native int | initRaster(int nativeBitmapOrZero)
| public native boolean | isOpaque()Return true if the device that the current layer draws into is opaque
(i.e. does not support per-pixel alpha).
| private static native void | nativeDrawBitmapMatrix(int nCanvas, int nBitmap, int nMatrix, int nPaint)
| private static native void | nativeDrawBitmapMesh(int nCanvas, int nBitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, int nPaint)
| private static native void | nativeDrawVertices(int nCanvas, int mode, int n, float[] verts, int vertOffset, float[] texs, int texOffset, int[] colors, int colorOffset, short[] indices, int indexOffset, int indexCount, int nPaint)
| private static native void | nativeSetDrawFilter(int nativeCanvas, int nativeFilter)
| private static native void | nativeSetViewport(int nCanvas, int w, int h)
| private static native boolean | native_clipPath(int nativeCanvas, int nativePath, int regionOp)
| private static native boolean | native_clipRect(int nCanvas, float left, float top, float right, float bottom, int regionOp)
| private static native boolean | native_clipRegion(int nativeCanvas, int nativeRegion, int regionOp)
| private static native void | native_concat(int nCanvas, int nMatrix)
| private static native void | native_drawARGB(int nativeCanvas, int a, int r, int g, int b)
| private static native void | native_drawArc(int nativeCanvas, RectF oval, float startAngle, float sweep, boolean useCenter, int paint)
| private native void | native_drawBitmap(int nativeCanvas, int bitmap, float left, float top, int nativePaintOrZero, boolean autoScale, float densityScale)
| private native void | native_drawBitmap(int nativeCanvas, int bitmap, Rect src, RectF dst, int nativePaintOrZero)
| private static native void | native_drawBitmap(int nativeCanvas, int bitmap, Rect src, Rect dst, int nativePaintOrZero)
| private static native void | native_drawBitmap(int nativeCanvas, int[] colors, int offset, int stride, float x, float y, int width, int height, boolean hasAlpha, int nativePaintOrZero)
| private static native void | native_drawCircle(int nativeCanvas, float cx, float cy, float radius, int paint)
| private static native void | native_drawColor(int nativeCanvas, int color)
| private static native void | native_drawColor(int nativeCanvas, int color, int mode)
| private static native void | native_drawLine(int nativeCanvas, float startX, float startY, float stopX, float stopY, int paint)
| private static native void | native_drawOval(int nativeCanvas, RectF oval, int paint)
| private static native void | native_drawPaint(int nativeCanvas, int paint)
| private static native void | native_drawPath(int nativeCanvas, int path, int paint)
| private static native void | native_drawPicture(int nativeCanvas, int nativePicture)
| private static native void | native_drawPosText(int nativeCanvas, char[] text, int index, int count, float[] pos, int paint)
| private static native void | native_drawPosText(int nativeCanvas, java.lang.String text, float[] pos, int paint)
| private static native void | native_drawRGB(int nativeCanvas, int r, int g, int b)
| private static native void | native_drawRect(int nativeCanvas, RectF rect, int paint)
| private static native void | native_drawRect(int nativeCanvas, float left, float top, float right, float bottom, int paint)
| private static native void | native_drawRoundRect(int nativeCanvas, RectF rect, float rx, float ry, int paint)
| private static native void | native_drawText(int nativeCanvas, char[] text, int index, int count, float x, float y, int paint)
| private static native void | native_drawText(int nativeCanvas, java.lang.String text, int start, int end, float x, float y, int paint)
| private static native void | native_drawTextOnPath(int nativeCanvas, char[] text, int index, int count, int path, float hOffset, float vOffset, int paint)
| private static native void | native_drawTextOnPath(int nativeCanvas, java.lang.String text, int path, float hOffset, float vOffset, int paint)
| private static native void | native_getCTM(int canvas, int matrix)
| private static native boolean | native_getClipBounds(int nativeCanvas, Rect bounds)
| private static native boolean | native_quickReject(int nativeCanvas, RectF rect, int native_edgeType)
| private static native boolean | native_quickReject(int nativeCanvas, int path, int native_edgeType)
| private static native boolean | native_quickReject(int nativeCanvas, float left, float top, float right, float bottom, int native_edgeType)
| private static native int | native_saveLayer(int nativeCanvas, RectF bounds, int paint, int layerFlags)
| private static native int | native_saveLayer(int nativeCanvas, float l, float t, float r, float b, int paint, int layerFlags)
| private static native int | native_saveLayerAlpha(int nativeCanvas, RectF bounds, int alpha, int layerFlags)
| private static native int | native_saveLayerAlpha(int nativeCanvas, float l, float t, float r, float b, int alpha, int layerFlags)
| private static native void | native_setBitmap(int nativeCanvas, int bitmap)
| private static native void | native_setMatrix(int nCanvas, int nMatrix)
| public boolean | quickReject(RectF rect, android.graphics.Canvas$EdgeType type)Return true if the specified rectangle, after being transformed by the
current matrix, would lie completely outside of the current clip. Call
this to check if an area you intend to draw into is clipped out (and
therefore you can skip making the draw calls).
return native_quickReject(mNativeCanvas, rect, type.nativeInt);
| public boolean | quickReject(Path path, android.graphics.Canvas$EdgeType type)Return true if the specified path, after being transformed by the
current matrix, would lie completely outside of the current clip. Call
this to check if an area you intend to draw into is clipped out (and
therefore you can skip making the draw calls). Note: for speed it may
return false even if the path itself might not intersect the clip
(i.e. the bounds of the path intersects, but the path does not).
return native_quickReject(mNativeCanvas, path.ni(), type.nativeInt);
| public boolean | quickReject(float left, float top, float right, float bottom, android.graphics.Canvas$EdgeType type)Return true if the specified rectangle, after being transformed by the
current matrix, would lie completely outside of the current clip. Call
this to check if an area you intend to draw into is clipped out (and
therefore you can skip making the draw calls).
return native_quickReject(mNativeCanvas, left, top, right, bottom,
type.nativeInt);
| public native void | restore()This call balances a previous call to save(), and is used to remove all
modifications to the matrix/clip state since the last save call. It is
an error to call restore() more times than save() was called.
| public native void | restoreToCount(int saveCount)Efficient way to pop any calls to save() that happened after the save
count reached saveCount. It is an error for saveCount to be less than 1.
Example:
int count = canvas.save();
... // more calls potentially to save()
canvas.restoreToCount(count);
// now the canvas is back in the same state it was before the initial
// call to save().
| public native void | rotate(float degrees)Preconcat the current matrix with the specified rotation.
| public final void | rotate(float degrees, float px, float py)Preconcat the current matrix with the specified rotation.
translate(px, py);
rotate(degrees);
translate(-px, -py);
| public native int | save()Saves the current matrix and clip onto a private stack. Subsequent
calls to translate,scale,rotate,skew,concat or clipRect,clipPath
will all operate as usual, but when the balancing call to restore()
is made, those calls will be forgotten, and the settings that existed
before the save() will be reinstated.
| public native int | save(int saveFlags)Based on saveFlags, can save the current matrix and clip onto a private
stack. Subsequent calls to translate,scale,rotate,skew,concat or
clipRect,clipPath will all operate as usual, but when the balancing
call to restore() is made, those calls will be forgotten, and the
settings that existed before the save() will be reinstated.
| public int | saveLayer(RectF bounds, Paint paint, int saveFlags)This behaves the same as save(), but in addition it allocates an
offscreen bitmap. All drawing calls are directed there, and only when
the balancing call to restore() is made is that offscreen transfered to
the canvas (or the previous layer). Subsequent calls to translate,
scale, rotate, skew, concat or clipRect, clipPath all operate on this
copy. When the balancing call to restore() is made, this copy is
deleted and the previous matrix/clip state is restored.
return native_saveLayer(mNativeCanvas, bounds,
paint != null ? paint.mNativePaint : 0,
saveFlags);
| public int | saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags)Helper version of saveLayer() that takes 4 values rather than a RectF.
return native_saveLayer(mNativeCanvas, left, top, right, bottom,
paint != null ? paint.mNativePaint : 0,
saveFlags);
| public int | saveLayerAlpha(RectF bounds, int alpha, int saveFlags)This behaves the same as save(), but in addition it allocates an
offscreen bitmap. All drawing calls are directed there, and only when
the balancing call to restore() is made is that offscreen transfered to
the canvas (or the previous layer). Subsequent calls to translate,
scale, rotate, skew, concat or clipRect, clipPath all operate on this
copy. When the balancing call to restore() is made, this copy is
deleted and the previous matrix/clip state is restored.
alpha = Math.min(255, Math.max(0, alpha));
return native_saveLayerAlpha(mNativeCanvas, bounds, alpha, saveFlags);
| public int | saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags)Helper for saveLayerAlpha() that takes 4 values instead of a RectF.
return native_saveLayerAlpha(mNativeCanvas, left, top, right, bottom,
alpha, saveFlags);
| public native void | scale(float sx, float sy)Preconcat the current matrix with the specified scale.
| public final void | scale(float sx, float sy, float px, float py)Preconcat the current matrix with the specified scale.
translate(px, py);
scale(sx, sy);
translate(-px, -py);
| public void | setBitmap(Bitmap bitmap)Specify a bitmap for the canvas to draw into.
if (!bitmap.isMutable()) {
throw new IllegalStateException();
}
if (mGL != null) {
throw new RuntimeException("Can't set a bitmap device on a GL canvas");
}
throwIfRecycled(bitmap);
native_setBitmap(mNativeCanvas, bitmap.ni());
mBitmap = bitmap;
mDensityScale = bitmap.getDensityScale();
if (mDensityScale == Bitmap.DENSITY_SCALE_UNKNOWN) mDensityScale = 1.0f;
| public void | setDensityScale(float densityScale)Specifies the density scale for this Canvas' backing bitmap, expressed as a
factor of the default density (160dpi.) For instance, a bitmap designed for
240dpi displays will have a density scale of 1.5 whereas a bitmap
designed for 160dpi will have a density scale of 1.0.
if (mBitmap != null) {
mBitmap.setDensityScale(densityScale);
}
mDensityScale = densityScale;
if (mDensityScale == Bitmap.DENSITY_SCALE_UNKNOWN) mDensityScale = 1.0f;
| public void | setDrawFilter(DrawFilter filter)
int nativeFilter = 0;
if (filter != null) {
nativeFilter = filter.mNativeInt;
}
mDrawFilter = filter;
nativeSetDrawFilter(mNativeCanvas, nativeFilter);
| public void | setMatrix(Matrix matrix)Completely replace the current matrix with the specified matrix. If the
matrix parameter is null, then the current matrix is reset to identity.
native_setMatrix(mNativeCanvas,
matrix == null ? 0 : matrix.native_instance);
| public void | setViewport(int width, int height)Set the viewport dimensions if this canvas is GL based. If it is not,
this method is ignored and no exception is thrown.
if (mGL != null) {
nativeSetViewport(mNativeCanvas, width, height);
}
| public native void | skew(float sx, float sy)Preconcat the current matrix with the specified skew.
| private static void | throwIfRecycled(Bitmap bitmap)
if (bitmap.isRecycled()) {
throw new RuntimeException(
"Canvas: trying to use a recycled bitmap " + bitmap);
}
| public native void | translate(float dx, float dy)Preconcat the current matrix with the specified translation
|
|