Devesh Sanghvi
07/07/2021, 11:23 PMColton Idle
07/08/2021, 4:18 AMDevesh Sanghvi
07/08/2021, 3:42 PM@Composable
fun ProgressBar(progress: Float) {
Box(
Modifier
.fillMaxSize()
.padding(8.dp)
.drawBehind {
drawArc(
color = Color.Blue,
startAngle = 180f,
sweepAngle = 180f,
useCenter = false,
style = Stroke(width = 20f)
)
drawArc(
color = Color.Green,
startAngle = 180f,
sweepAngle = progress * 180 / 100,
useCenter = false,
style = Stroke(width = 40f, cap = StrokeCap.Round)
)
}
.clipToBounds()
)
}
@Composable
fun ArcProgressBar(
progress: Float = 50f,
modifier: Modifier = Modifier
) {
Box(
modifier
.size(200.dp, 100.dp)
) {
Text(
text = "${progress}%",
style = MaterialTheme.typography.h4,
modifier = Modifier.align(alignment = Alignment.Center)
)
ProgressBar(progress)
}
}
Nader Jawad
07/08/2021, 8:43 PMdrawArc
will automatically draw an ellipse that occupies the bounds of the drawing area. Because this arc is explicitly drawing a semi-circle starting at 9 o'clock, we needed to double the height of the arc being drawn to create as circular arc instead. Note the usage of the size
parameter in the drawArc calls below:
@Composable
fun ProgressBar(progress: Float) {
Box(
Modifier
.fillMaxSize()
.padding(8.dp)
.drawBehind {
drawArc(
color = Color.Blue,
size = Size(size.width, size.height * 2),
startAngle = 180f,
sweepAngle = 180f,
useCenter = false,
style = Stroke(width = 20f)
)
drawArc(
color = Color.Green,
size = Size(size.width, size.height * 2),
startAngle = 180f,
sweepAngle = progress * 180 / 100,
useCenter = false,
style = Stroke(width = 40f, cap = StrokeCap.Round)
)
}
.clipToBounds()
)
}
Nader Jawad
07/08/2021, 8:44 PMDevesh Sanghvi
07/08/2021, 10:07 PMNader Jawad
07/08/2021, 10:10 PM@Composable
fun ProgressBar(progress: Float) {
Box(
Modifier
.fillMaxSize()
.padding(8.dp)
.drawBehind {
drawArc(
color = Color.Blue,
size = Size(size.width, size.height * 2),
startAngle = 180f,
sweepAngle = 180f,
useCenter = false,
style = Stroke(width = 20f)
)
drawArc(
color = Color.Green,
size = Size(size.width, size.height * 2),
startAngle = 180f,
sweepAngle = progress * 180 / 100,
useCenter = false,
style = Stroke(width = 40f, cap = StrokeCap.Round)
)
}
.clipToBounds()
)
}
@Composable
fun ArcProgressBar(
progress: Float = 50f,
modifier: Modifier = Modifier
) {
Box(
modifier
.size(200.dp, 100.dp)
) {
Text(
text = "${progress}%",
style = MaterialTheme.typography.h4,
modifier = Modifier.align(alignment = Alignment.BottomCenter)
)
ProgressBar(progress)
}
}
Devesh Sanghvi
07/08/2021, 10:15 PM