В главном меню у меня есть логотип и две «кнопки»: «Новый лист» и «Продолжить». Я не использую настоящую кнопку, потому что хочу строго контролировать весь внешний вид кнопки с помощью некоторых векторных изображений для нормального и нажатого состояний. Итак, я использую изображение с обработчиком onClick и модификатором pointerInput, который регулирует, какой объект рисования отображается.
Проблема в том, что когда я нажимаю одну из кнопок, они появляются ДИКО. маленький, и я понятия не имею, почему. Я подтвердил, что как обычная, так и сжатая версии векторных рисунков имеют одинаковый размер (280x50 dp). Вот несколько скриншотов того, как это выглядит до, при нажатии и после нажатия:

Код: Выделить всё
Scaffold(modifier = Modifier.fillMaxSize()) { padding ->
Box(modifier = Modifier
.fillMaxSize()
.background( /* bg gradient */ )
.padding(padding)
) {
Column(
horizontalAlignment = CenterHorizontally,
verticalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxSize()
) {
Image( /* logo */ )
Spacer( /* height */ )
val buttonWidthFraction = 0.75f
ImageButton(
normal = R.drawable.button_new_sheet_normal,
pressed = R.drawable.button_new_sheet_active,
onClick = {
navController.navigate(Nav.newsheet)
},
modifier = Modifier
.shadow(
elevation = 100.dp,
ambientColor = Color.Black,
)
.width(logoImageWidth * buttonWidthFraction)
)
Spacer( /* height */ )
ImageButton( /* other other button, same config */ )
}
}
}
@Composable
fun ImageButton(
@DrawableRes normal: Int,
@DrawableRes pressed: Int,
modifier: Modifier = Modifier,
isdisabled: Boolean = false,
onClick: () -> Unit,
) {
var isPressed by remember { mutableStateOf(false) }
val coroutineScope = rememberCoroutineScope()
Image(
painter = painterResource(if (isPressed) pressed else normal),
contentScale = ContentScale.FillWidth,
modifier = modifier
.fillMaxWidth()
.alpha(if (isdisabled) 0.5f else 1f)
.pointerInput(Unit) {
detectTapGestures(
onPress = {
coroutineScope.launch {
isPressed = true
tryAwaitRelease() // Wait for the release of the button
isPressed = false
}
onClick()
}
)
}
)
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... en-clicked