StampedPathEffectStyle
value class StampedPathEffectStyle
internal constructor(@Suppress("unused") private val value: Int)
Strategy for transforming each point of the shape along the drawn path
Companion Object
Properties
val Translate = StampedPathEffectStyle(0)
Translate the path shape into the specified location aligning the top left of the path with the drawn geometry. This does not modify the path itself.
For example, a circle drawn with a square path and Translate
will draw the square path
repeatedly with the top left corner of each stamped square along the curvature of the
circle.
val Rotate = StampedPathEffectStyle(1)
Rotates the path shape its center along the curvature of the drawn geometry. This does not modify the path itself.
For example, a circle drawn with a square path and Rotate
will draw the square path
repeatedly with the center of each stamped square along the curvature of the circle as
well as each square being rotated along the circumference.
val Morph = StampedPathEffectStyle(2)
Modifies the points within the path such that they fit within the drawn geometry. This will turn straight lines into curves.
For example, a circle drawn with a square path and Morph
will modify the straight lines
of the square paths to be curves such that each stamped square is rendered as an arc
around the curvature of the circle.
Code Examples
StampedPathEffectSample
@Composable
fun StampedPathEffectSample() {
val size = 20f
val square =
Path().apply {
lineTo(size, 0f)
lineTo(size, size)
lineTo(0f, size)
close()
}
Column(modifier = Modifier.fillMaxHeight().wrapContentSize(Alignment.Center)) {
val canvasModifier = Modifier.requiredSize(80.dp).align(Alignment.CenterHorizontally)
// StampedPathEffectStyle.Morph will modify the lines of the square to be curved to fit
// the curvature of the circle itself. Each stamped square will be rendered as an arc
// that is fully contained by the bounds of the circle itself
Canvas(modifier = canvasModifier) {
drawCircle(color = Color.Blue)
drawCircle(
color = Color.Red,
style =
Stroke(
pathEffect =
PathEffect.stampedPathEffect(
shape = square,
style = StampedPathEffectStyle.Morph,
phase = 0f,
advance = 30f,
)
),
)
}
Spacer(modifier = Modifier.requiredSize(10.dp))
// StampedPathEffectStyle.Rotate will draw the square repeatedly around the circle
// such that each stamped square is centered on the circumference of the circle and is
// rotated along the curvature of the circle itself
Canvas(modifier = canvasModifier) {
drawCircle(color = Color.Blue)
drawCircle(
color = Color.Red,
style =
Stroke(
pathEffect =
PathEffect.stampedPathEffect(
shape = square,
style = StampedPathEffectStyle.Rotate,
phase = 0f,
advance = 30f,
)
),
)
}
Spacer(modifier = Modifier.requiredSize(10.dp))
// StampedPathEffectStyle.Translate will draw the square repeatedly around the circle
// with the top left of each stamped square on the circumference of the circle
Canvas(modifier = canvasModifier) {
drawCircle(color = Color.Blue)
drawCircle(
color = Color.Red,
style =
Stroke(
pathEffect =
PathEffect.stampedPathEffect(
shape = square,
style = StampedPathEffectStyle.Translate,
phase = 0f,
advance = 30f,
)
),
)
}
}
}