Skip to content

Instantly share code, notes, and snippets.

@mcatta
Created November 17, 2022 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mcatta/dd9e0b2fa65f8642ce01b8adabc72f84 to your computer and use it in GitHub Desktop.
Save mcatta/dd9e0b2fa65f8642ce01b8adabc72f84 to your computer and use it in GitHub Desktop.
A Jetpack Compose Modifier which allows to add a colored shadow with a specific X and Y offset
/**
* Change shadow color and style
* @param color shadow color
* @param alpha shadow alpha
* @param borderRadius shadow border radius
* @param shadowRadius shadow size
* @param offsetX X offset
* @param offsetY Y offset
*/
@RequiresApi(Build.VERSION_CODES.P)
private fun Modifier.coloredShadow(
color: Color,
alpha: Float = 0.2f,
borderRadius: Dp = 0.dp,
shadowRadius: Dp = 20.dp,
offsetY: Dp = 0.dp,
offsetX: Dp = 0.dp
) = composed {
val shadowColor = color.copy(alpha = alpha).toArgb()
val transparent = color.copy(alpha = 0f).toArgb()
this.drawBehind {
this.drawIntoCanvas {
val paint = Paint()
val frameworkPaint = paint.asFrameworkPaint()
frameworkPaint.color = transparent
frameworkPaint.setShadowLayer(
shadowRadius.toPx(),
offsetX.toPx(),
offsetY.toPx(),
shadowColor
)
it.drawRoundRect(
0f,
0f,
this.size.width,
this.size.height,
borderRadius.toPx(),
borderRadius.toPx(),
paint
)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment