Google is committed to advancing racial equity for Black communities. See how.
Added in API level 1

Path

open class Path
kotlin.Any
   ↳ android.graphics.Path

The Path class encapsulates compound (multiple contour) geometric paths consisting of straight line segments, quadratic curves, and cubic curves. It can be drawn with canvas.drawPath(path, paint), either filled or stroked (based on the paint's Style), or it can be used for clipping or to draw text on a path.

Summary

Nested classes

Specifies how closed shapes (e.g. rects, ovals) are oriented when they are added to a path.

Enum for the ways a path may be filled.

The logical operations that can be performed when combining two paths.

Public constructors

Create an empty path

<init>(src: Path?)

Create a new path, copying the contents from the src path.

Public methods

open Unit
addArc(oval: RectF, startAngle: Float, sweepAngle: Float)

Add the specified arc to the path as a new contour.

open Unit
addArc(left: Float, top: Float, right: Float, bottom: Float, startAngle: Float, sweepAngle: Float)

Add the specified arc to the path as a new contour.

open Unit
addCircle(x: Float, y: Float, radius: Float, dir: Path.Direction)

Add a closed circle contour to the path

open Unit

Add a closed oval contour to the path

open Unit
addOval(left: Float, top: Float, right: Float, bottom: Float, dir: Path.Direction)

Add a closed oval contour to the path

open Unit
addPath(src: Path, dx: Float, dy: Float)

Add a copy of src to the path, offset by (dx,dy)

open Unit
addPath(src: Path)

Add a copy of src to the path

open Unit
addPath(src: Path, matrix: Matrix)

Add a copy of src to the path, transformed by matrix

open Unit

Add a closed rectangle contour to the path

open Unit
addRect(left: Float, top: Float, right: Float, bottom: Float, dir: Path.Direction)

Add a closed rectangle contour to the path

open Unit
addRoundRect(rect: RectF, rx: Float, ry: Float, dir: Path.Direction)

Add a closed round-rectangle contour to the path

open Unit
addRoundRect(left: Float, top: Float, right: Float, bottom: Float, rx: Float, ry: Float, dir: Path.Direction)

Add a closed round-rectangle contour to the path

open Unit

Add a closed round-rectangle contour to the path.

open Unit
addRoundRect(left: Float, top: Float, right: Float, bottom: Float, radii: FloatArray, dir: Path.Direction)

Add a closed round-rectangle contour to the path.

open FloatArray
approximate(acceptableError: Float)

Approximate the Path with a series of line segments.

open Unit
arcTo(oval: RectF, startAngle: Float, sweepAngle: Float, forceMoveTo: Boolean)

Append the specified arc to the path as a new contour.

open Unit
arcTo(oval: RectF, startAngle: Float, sweepAngle: Float)

Append the specified arc to the path as a new contour.

open Unit
arcTo(left: Float, top: Float, right: Float, bottom: Float, startAngle: Float, sweepAngle: Float, forceMoveTo: Boolean)

Append the specified arc to the path as a new contour.

open Unit

Close the current contour.

open Unit
computeBounds(bounds: RectF, exact: Boolean)

Compute the bounds of the control points of the path, and write the answer into bounds.

open Unit
cubicTo(x1: Float, y1: Float, x2: Float, y2: Float, x3: Float, y3: Float)

Add a cubic bezier from the last point, approaching control points (x1,y1) and (x2,y2), and ending at (x3,y3).

open Path.FillType

Return the path's fill type.

open Unit
incReserve(extraPtCount: Int)

Hint to the path to prepare for adding more points.

open Boolean

Returns the path's convexity, as defined by the content of the path.

open Boolean

Returns true if the path is empty (contains no lines or curves)

open Boolean

Returns true if the filltype is one of the INVERSE variants

open Boolean
isRect(rect: RectF?)

Returns true if the path specifies a rectangle.

open Unit
lineTo(x: Float, y: Float)

Add a line from the last point to the specified point (x,y).

open Unit
moveTo(x: Float, y: Float)

Set the beginning of the next contour to the point (x,y).

open Unit
offset(dx: Float, dy: Float, dst: Path?)

Offset the path by (dx,dy)

open Unit
offset(dx: Float, dy: Float)

Offset the path by (dx,dy)

open Boolean
op(path: Path, op: Path.Op)

Set this path to the result of applying the Op to this path and the specified path.

open Boolean
op(path1: Path, path2: Path, op: Path.Op)

Set this path to the result of applying the Op to the two specified paths.

open Unit
quadTo(x1: Float, y1: Float, x2: Float, y2: Float)

Add a quadratic bezier from the last point, approaching control point (x1,y1), and ending at (x2,y2).

open Unit
rCubicTo(x1: Float, y1: Float, x2: Float, y2: Float, x3: Float, y3: Float)

Same as cubicTo, but the coordinates are considered relative to the current point on this contour.

open Unit
rLineTo(dx: Float, dy: Float)

Same as lineTo, but the coordinates are considered relative to the last point on this contour.

open Unit
rMoveTo(dx: Float, dy: Float)

Set the beginning of the next contour relative to the last point on the previous contour.

open Unit
rQuadTo(dx1: Float, dy1: Float, dx2: Float, dy2: Float)

Same as quadTo, but the coordinates are considered relative to the last point on this contour.

open Unit

Clear any lines and curves from the path, making it empty.

open Unit

Rewinds the path: clears any lines and curves from the path but keeps the internal data structure for faster reuse.

open Unit
set(src: Path)

Replace the contents of this with the contents of src.

open Unit

Set the path's fill type.

open Unit

Sets the last point of the path.

open Unit

Toggles the INVERSE state of the filltype

open Unit
transform(matrix: Matrix, dst: Path?)

Transform the points in this path by matrix, and write the answer into dst.

open Unit
transform(matrix: Matrix)

Transform the points in this path by matrix.

Public constructors

<init>

Added in API level 1
Path()

Create an empty path

<init>

Added in API level 1
Path(src: Path?)

Create a new path, copying the contents from the src path.

Parameters
src Path?: The path to copy from when initializing the new path This value may be null.

Public methods

addArc

Added in API level 1
open fun addArc(
    oval: RectF,
    startAngle: Float,
    sweepAngle: Float
): Unit

Add the specified arc to the path as a new contour.

Parameters
oval RectF: The bounds of oval defining the shape and size of the arc This value cannot be null.
startAngle Float: Starting angle (in degrees) where the arc begins
sweepAngle Float: Sweep angle (in degrees) measured clockwise

addArc

Added in API level 21
open fun addArc(
    left: Float,
    top: Float,
    right: Float,
    bottom: Float,
    startAngle: Float,
    sweepAngle: Float
): Unit

Add the specified arc to the path as a new contour.

Parameters
startAngle Float: Starting angle (in degrees) where the arc begins
sweepAngle Float: Sweep angle (in degrees) measured clockwise

addCircle

Added in API level 1
open fun addCircle(
    x: Float,
    y: Float,
    radius: Float,
    dir: Path.Direction
): Unit

Add a closed circle contour to the path

Parameters
x Float: The x-coordinate of the center of a circle to add to the path
y Float: The y-coordinate of the center of a circle to add to the path
radius Float: The radius of a circle to add to the path
dir Path.Direction: The direction to wind the circle's contour This value cannot be null.

addOval

Added in API level 1
open fun addOval(
    oval: RectF,
    dir: Path.Direction
): Unit

Add a closed oval contour to the path

Parameters
oval RectF: The bounds of the oval to add as a closed contour to the path This value cannot be null.
dir Path.Direction: The direction to wind the oval's contour This value cannot be null.

addOval

Added in API level 21
open fun addOval(
    left: Float,
    top: Float,
    right: Float,
    bottom: Float,
    dir: Path.Direction
): Unit

Add a closed oval contour to the path

Parameters
dir Path.Direction: The direction to wind the oval's contour This value cannot be null.

addPath

Added in API level 1
open fun addPath(
    src: Path,
    dx: Float,
    dy: Float
): Unit

Add a copy of src to the path, offset by (dx,dy)

Parameters
src Path: The path to add as a new contour This value cannot be null.
dx Float: The amount to translate the path in X as it is added

addPath

Added in API level 1
open fun addPath(src: Path): Unit

Add a copy of src to the path

Parameters
src Path: The path that is appended to the current path This value cannot be null.

addPath

Added in API level 1
open fun addPath(
    src: Path,
    matrix: Matrix
): Unit

Add a copy of src to the path, transformed by matrix

Parameters
src Path: The path to add as a new contour This value cannot be null.
matrix Matrix: This value cannot be null.

addRect

Added in API level 1
open fun addRect(
    rect: RectF,
    dir: Path.Direction
): Unit

Add a closed rectangle contour to the path

Parameters
rect RectF: The rectangle to add as a closed contour to the path This value cannot be null.
dir Path.Direction: The direction to wind the rectangle's contour This value cannot be null.

addRect

Added in API level 1
open fun addRect(
    left: Float,
    top: Float,
    right: Float,
    bottom: Float,
    dir: Path.Direction
): Unit

Add a closed rectangle contour to the path

Parameters
left Float: The left side of a rectangle to add to the path
top Float: The top of a rectangle to add to the path
right Float: The right side of a rectangle to add to the path
bottom Float: The bottom of a rectangle to add to the path
dir Path.Direction: The direction to wind the rectangle's contour This value cannot be null.

addRoundRect

Added in API level 1
open fun addRoundRect(
    rect: RectF,
    rx: Float,
    ry: Float,
    dir: Path.Direction
): Unit

Add a closed round-rectangle contour to the path

Parameters
rect RectF: The bounds of a round-rectangle to add to the path This value cannot be null.
rx Float: The x-radius of the rounded corners on the round-rectangle
ry Float: The y-radius of the rounded corners on the round-rectangle
dir Path.Direction: The direction to wind the round-rectangle's contour This value cannot be null.

addRoundRect

Added in API level 21
open fun addRoundRect(
    left: Float,
    top: Float,
    right: Float,
    bottom: Float,
    rx: Float,
    ry: Float,
    dir: Path.Direction
): Unit

Add a closed round-rectangle contour to the path

Parameters
rx Float: The x-radius of the rounded corners on the round-rectangle
ry Float: The y-radius of the rounded corners on the round-rectangle
dir Path.Direction: The direction to wind the round-rectangle's contour This value cannot be null.

addRoundRect

Added in API level 1
open fun addRoundRect(
    rect: RectF,
    radii: FloatArray,
    dir: Path.Direction
): Unit

Add a closed round-rectangle contour to the path. Each corner receives two radius values [X, Y]. The corners are ordered top-left, top-right, bottom-right, bottom-left

Parameters
rect RectF: The bounds of a round-rectangle to add to the path This value cannot be null.
radii FloatArray: Array of 8 values, 4 pairs of [X,Y] radii This value cannot be null.
dir Path.Direction: The direction to wind the round-rectangle's contour This value cannot be null.

addRoundRect

Added in API level 21
open fun addRoundRect(
    left: Float,
    top: Float,
    right: Float,
    bottom: Float,
    radii: FloatArray,
    dir: Path.Direction
): Unit

Add a closed round-rectangle contour to the path. Each corner receives two radius values [X, Y]. The corners are ordered top-left, top-right, bottom-right, bottom-left

Parameters
radii FloatArray: Array of 8 values, 4 pairs of [X,Y] radii This value cannot be null.
dir Path.Direction: The direction to wind the round-rectangle's contour This value cannot be null.

approximate

Added in API level 26
open fun approximate(acceptableError: Float): FloatArray

Approximate the Path with a series of line segments. This returns float[] with the array containing point components. There are three components for each point, in order:

  • Fraction along the length of the path that the point resides
  • The x coordinate of the point
  • The y coordinate of the point

Two points may share the same fraction along its length when there is a move action within the Path.

Parameters
acceptableError Float: The acceptable error for a line on the Path. Typically this would be 0.5 so that the error is less than half a pixel. Value is 0 or greater
Return
FloatArray An array of components for points approximating the Path. This value cannot be null.

arcTo

Added in API level 1
open fun arcTo(
    oval: RectF,
    startAngle: Float,
    sweepAngle: Float,
    forceMoveTo: Boolean
): Unit

Append the specified arc to the path as a new contour. If the start of the path is different from the path's current last point, then an automatic lineTo() is added to connect the current contour to the start of the arc. However, if the path is empty, then we call moveTo() with the first point of the arc.

Parameters
oval RectF: The bounds of oval defining shape and size of the arc This value cannot be null.
startAngle Float: Starting angle (in degrees) where the arc begins
sweepAngle Float: Sweep angle (in degrees) measured clockwise, treated mod 360.
forceMoveTo Boolean: If true, always begin a new contour with the arc

arcTo

Added in API level 1
open fun arcTo(
    oval: RectF,
    startAngle: Float,
    sweepAngle: Float
): Unit

Append the specified arc to the path as a new contour. If the start of the path is different from the path's current last point, then an automatic lineTo() is added to connect the current contour to the start of the arc. However, if the path is empty, then we call moveTo() with the first point of the arc.

Parameters
oval RectF: The bounds of oval defining shape and size of the arc This value cannot be null.
startAngle Float: Starting angle (in degrees) where the arc begins
sweepAngle Float: Sweep angle (in degrees) measured clockwise

arcTo

Added in API level 21
open fun arcTo(
    left: Float,
    top: Float,
    right: Float,
    bottom: Float,
    startAngle: Float,
    sweepAngle: Float,
    forceMoveTo: Boolean
): Unit

Append the specified arc to the path as a new contour. If the start of the path is different from the path's current last point, then an automatic lineTo() is added to connect the current contour to the start of the arc. However, if the path is empty, then we call moveTo() with the first point of the arc.

Parameters
startAngle Float: Starting angle (in degrees) where the arc begins
sweepAngle Float: Sweep angle (in degrees) measured clockwise, treated mod 360.
forceMoveTo Boolean: If true, always begin a new contour with the arc

close

Added in API level 1
open fun close(): Unit

Close the current contour. If the current point is not equal to the first point of the contour, a line segment is automatically added.

computeBounds

Added in API level 1
open fun computeBounds(
    bounds: RectF,
    exact: Boolean
): Unit

Compute the bounds of the control points of the path, and write the answer into bounds. If the path contains 0 or 1 points, the bounds is set to (0,0,0,0)

Parameters
bounds RectF: Returns the computed bounds of the path's control points. This value cannot be null.
exact Boolean: This parameter is no longer used.

cubicTo

Added in API level 1
open fun cubicTo(
    x1: Float,
    y1: Float,
    x2: Float,
    y2: Float,
    x3: Float,
    y3: Float
): Unit

Add a cubic bezier from the last point, approaching control points (x1,y1) and (x2,y2), and ending at (x3,y3). If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).

Parameters
x1 Float: The x-coordinate of the 1st control point on a cubic curve
y1 Float: The y-coordinate of the 1st control point on a cubic curve
x2 Float: The x-coordinate of the 2nd control point on a cubic curve
y2 Float: The y-coordinate of the 2nd control point on a cubic curve
x3 Float: The x-coordinate of the end point on a cubic curve
y3 Float: The y-coordinate of the end point on a cubic curve

getFillType

Added in API level 1
open fun getFillType(): Path.FillType

Return the path's fill type. This defines how "inside" is computed. The default value is WINDING.

Return
Path.FillType the path's fill type This value cannot be null.

incReserve

Added in API level 1
open fun incReserve(extraPtCount: Int): Unit

Hint to the path to prepare for adding more points. This can allow the path to more efficiently allocate its storage.

Parameters
extraPtCount Int: The number of extra points that may be added to this path

isConvex

Added in API level 21
Deprecated in API level 30
open fun isConvex(): Boolean

Deprecated: This method is not reliable. The way convexity is computed may change from release to release, and convexity could change based on a matrix as well. This method was useful when non-convex Paths were unable to be used in certain contexts, but that is no longer the case.

Returns the path's convexity, as defined by the content of the path.

A path is convex if it has a single contour, and only ever curves in a single direction.

This function will calculate the convexity of the path from its control points, and cache the result.

Return
Boolean True if the path is convex.

isEmpty

Added in API level 1
open fun isEmpty(): Boolean

Returns true if the path is empty (contains no lines or curves)

Return
Boolean true if the path is empty (contains no lines or curves)

isInverseFillType

Added in API level 1
open fun isInverseFillType(): Boolean

Returns true if the filltype is one of the INVERSE variants

Return
Boolean true if the filltype is one of the INVERSE variants

isRect

Added in API level 1
open fun isRect(rect: RectF?): Boolean

Returns true if the path specifies a rectangle. If so, and if rect is not null, set rect to the bounds of the path. If the path does not specify a rectangle, return false and ignore rect.

Parameters
rect RectF?: If not null, returns the bounds of the path if it specifies a rectangle This value may be null.
Return
Boolean true if the path specifies a rectangle

lineTo

Added in API level 1
open fun lineTo(
    x: Float,
    y: Float
): Unit

Add a line from the last point to the specified point (x,y). If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).

Parameters
x Float: The x-coordinate of the end of a line
y Float: The y-coordinate of the end of a line

moveTo

Added in API level 1
open fun moveTo(
    x: Float,
    y: Float
): Unit

Set the beginning of the next contour to the point (x,y).

Parameters
x Float: The x-coordinate of the start of a new contour
y Float: The y-coordinate of the start of a new contour

offset

Added in API level 1
open fun offset(
    dx: Float,
    dy: Float,
    dst: Path?
): Unit

Offset the path by (dx,dy)

Parameters
dx Float: The amount in the X direction to offset the entire path
dy Float: The amount in the Y direction to offset the entire path
dst Path?: The translated path is written here. If this is null, then the original path is modified. This value may be null.

offset

Added in API level 1
open fun offset(
    dx: Float,
    dy: Float
): Unit

Offset the path by (dx,dy)

Parameters
dx Float: The amount in the X direction to offset the entire path
dy Float: The amount in the Y direction to offset the entire path

op

Added in API level 19
open fun op(
    path: Path,
    op: Path.Op
): Boolean

Set this path to the result of applying the Op to this path and the specified path. The resulting path will be constructed from non-overlapping contours. The curve order is reduced where possible so that cubics may be turned into quadratics, and quadratics maybe turned into lines.

Parameters
path Path: The second operand (for difference, the subtrahend) This value cannot be null.
op Path.Op: This value cannot be null.
Return
Boolean True if operation succeeded, false otherwise and this path remains unmodified.

op

Added in API level 19
open fun op(
    path1: Path,
    path2: Path,
    op: Path.Op
): Boolean

Set this path to the result of applying the Op to the two specified paths. The resulting path will be constructed from non-overlapping contours. The curve order is reduced where possible so that cubics may be turned into quadratics, and quadratics maybe turned into lines.

Parameters
path1 Path: The first operand (for difference, the minuend) This value cannot be null.
path2 Path: The second operand (for difference, the subtrahend) This value cannot be null.
op Path.Op: This value cannot be null.
Return
Boolean True if operation succeeded, false otherwise and this path remains unmodified.

quadTo

Added in API level 1
open fun quadTo(
    x1: Float,
    y1: Float,
    x2: Float,
    y2: Float
): Unit

Add a quadratic bezier from the last point, approaching control point (x1,y1), and ending at (x2,y2). If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).

Parameters
x1 Float: The x-coordinate of the control point on a quadratic curve
y1 Float: The y-coordinate of the control point on a quadratic curve
x2 Float: The x-coordinate of the end point on a quadratic curve
y2 Float: The y-coordinate of the end point on a quadratic curve

rCubicTo

Added in API level 1
open fun rCubicTo(
    x1: Float,
    y1: Float,
    x2: Float,
    y2: Float,
    x3: Float,
    y3: Float
): Unit

Same as cubicTo, but the coordinates are considered relative to the current point on this contour. If there is no previous point, then a moveTo(0,0) is inserted automatically.

rLineTo

Added in API level 1
open fun rLineTo(
    dx: Float,
    dy: Float
): Unit

Same as lineTo, but the coordinates are considered relative to the last point on this contour. If there is no previous point, then a moveTo(0,0) is inserted automatically.

Parameters
dx Float: The amount to add to the x-coordinate of the previous point on this contour, to specify a line
dy Float: The amount to add to the y-coordinate of the previous point on this contour, to specify a line

rMoveTo

Added in API level 1
open fun rMoveTo(
    dx: Float,
    dy: Float
): Unit

Set the beginning of the next contour relative to the last point on the previous contour. If there is no previous contour, this is treated the same as moveTo().

Parameters
dx Float: The amount to add to the x-coordinate of the end of the previous contour, to specify the start of a new contour
dy Float: The amount to add to the y-coordinate of the end of the previous contour, to specify the start of a new contour

rQuadTo

Added in API level 1
open fun rQuadTo(
    dx1: Float,
    dy1: Float,
    dx2: Float,
    dy2: Float
): Unit

Same as quadTo, but the coordinates are considered relative to the last point on this contour. If there is no previous point, then a moveTo(0,0) is inserted automatically.

Parameters
dx1 Float: The amount to add to the x-coordinate of the last point on this contour, for the control point of a quadratic curve
dy1 Float: The amount to add to the y-coordinate of the last point on this contour, for the control point of a quadratic curve
dx2 Float: The amount to add to the x-coordinate of the last point on this contour, for the end point of a quadratic curve
dy2 Float: The amount to add to the y-coordinate of the last point on this contour, for the end point of a quadratic curve

reset

Added in API level 1
open fun reset(): Unit

Clear any lines and curves from the path, making it empty. This does NOT change the fill-type setting.

rewind

Added in API level 1
open fun rewind(): Unit

Rewinds the path: clears any lines and curves from the path but keeps the internal data structure for faster reuse.

set

Added in API level 1
open fun set(src: Path): Unit

Replace the contents of this with the contents of src.

Parameters
src Path: This value cannot be null.

setFillType

Added in API level 1
open fun setFillType(ft: Path.FillType): Unit

Set the path's fill type. This defines how "inside" is computed.

Parameters
ft Path.FillType: The new fill type for this path This value cannot be null.

setLastPoint

Added in API level 1
open fun setLastPoint(
    dx: Float,
    dy: Float
): Unit

Sets the last point of the path.

Parameters
dx Float: The new X coordinate for the last point
dy Float: The new Y coordinate for the last point

toggleInverseFillType

Added in API level 1
open fun toggleInverseFillType(): Unit

Toggles the INVERSE state of the filltype

transform

Added in API level 1
open fun transform(
    matrix: Matrix,
    dst: Path?
): Unit

Transform the points in this path by matrix, and write the answer into dst. If dst is null, then the the original path is modified.

Parameters
matrix Matrix: The matrix to apply to the path This value cannot be null.
dst Path?: The transformed path is written here. If dst is null, then the the original path is modified This value may be null.

transform

Added in API level 1
open fun transform(matrix: Matrix): Unit

Transform the points in this path by matrix.

Parameters
matrix Matrix: The matrix to apply to the path This value cannot be null.