Aaron Waller
04/05/2022, 2:09 PMRow(horizontalArrangement = Arrangement.SpaceBetween) { //Not working :(
items.forEach { item ->
BottomNavigationItem(
icon = { Icon(painterResource(id = item.icon), contentDescription = item.title) },
label = { Text(text = item.title) },
selectedContentColor = Color.White,
unselectedContentColor = Color.White.copy(0.4f),
alwaysShowLabel = true,
selected = currentRoute == item.route,
onClick = {
navController.navigate(item.route) {
navController.graph.startDestinationRoute?.let { route ->
popUpTo(route) {
saveState = true
}
}
launchSingleTop = true
restoreState = true
}
}
)
}
}
Aaron Waller
04/05/2022, 5:05 PMitems.forEachIndexed { i, item ->
if (i == items.count() / 2) {
Spacer(Modifier.weight(1f))
}
BottomNavigationItem(
// ...
Mehdi Haghgoo
04/06/2022, 8:13 PMandrew
04/08/2022, 6:11 PMclass CutoutShape(
private val radius: Dp,
private val center: Dp,
) : Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density
): Outline = with(density) {
val boundingPath = Path().apply {
addRoundRect(RoundRect(size.toRect(), CornerRadius(radius.toPx())))
}
val path = Path().apply {
addCutoutShape(size, density)
op(boundingPath, this, PathOperation.Difference)
}
return Outline.Generic(path)
}
private fun Path.addCutoutShape(size: Size, density: Density) {
with(density) {
val fabMargin = 9.dp.toPx()
val fabDiameter = 60.dp.toPx()
val cradleDiameter = (fabMargin * 2F) + fabDiameter
val cradleRadius = cradleDiameter / 2F
val middle = center.toPx()
val cornerSize = 18.dp.toPx()
val distanceBetweenCenters = cradleRadius + cornerSize
val distanceBetweenCentersSquared = distanceBetweenCenters * distanceBetweenCenters
val distanceY: Float = cornerSize
val distanceX = sqrt(distanceBetweenCentersSquared - distanceY * distanceY)
val leftRoundedCornerCircleX = middle - distanceX
val rightRoundedCornerCircleX = middle + distanceX
val cornerRadiusArcLength = Math.toDegrees(atan(distanceX / distanceY).toDouble()).toFloat()
val cutoutArcOffset = (90F - cornerRadiusArcLength) + 1.75F
lineTo(leftRoundedCornerCircleX, 0F)
arcTo(
Rect(
leftRoundedCornerCircleX - cornerSize,
0F,
leftRoundedCornerCircleX + cornerSize,
cornerSize * 2F
),
270F,
cornerRadiusArcLength,
false,
)
arcTo(
Rect(
middle - cradleRadius,
-cradleRadius,
middle + cradleRadius,
cradleRadius,
),
180F - cutoutArcOffset,
cutoutArcOffset * 2 - 180F,
false
)
arcTo(
Rect(
rightRoundedCornerCircleX - cornerSize,
0F,
rightRoundedCornerCircleX + cornerSize,
cornerSize * 2
),
270F - cornerRadiusArcLength,
cornerRadiusArcLength,
false,
)
lineTo(rightRoundedCornerCircleX, 0F)
close()
}
}
}
andrew
04/08/2022, 6:12 PMMehdi Haghgoo
04/11/2022, 6:42 PMandrew
04/11/2022, 6:43 PMandrew
04/11/2022, 6:43 PMandrew
04/11/2022, 6:43 PMandrew
04/11/2022, 6:44 PMMehdi Haghgoo
04/11/2022, 6:46 PMandrew
04/11/2022, 7:06 PMandrew
04/11/2022, 7:06 PM