将像素转换为Dp自定义四舍五入指示可在Jetpack撰写中点击



我想在单击按钮时显示自定义指示。指示应该在角上圆角,并覆盖较深的颜色。到目前为止,我能够使用以下代码

实现这一点
Modifier.clickable(onClick = {}, indication = PressedIndication)
object PressedIndication : Indication {
    private object DefaultIndicationInstance : IndicationInstance {
        override fun ContentDrawScope.drawIndication(interactionState: InteractionState) {
            drawContent()
            if (interactionState.contains(Interaction.Pressed)) drawRoundRect(
                cornerRadius = CornerRadius(4f, 4f), //<-- How to use dp values?
                color = Color.Black.copy(
                    alpha = 0.3f
                ), size = size
            )
        }
    }
    override fun createInstance(): IndicationInstance {
        return DefaultIndicationInstance
    }
}

我可以使用drawRoundRectcornerRadius实现圆角,但是有任何方法使用dp值吗?

注意:我不能使用clickableclip,因为可点击区域不完全匹配指示区域

如2jan222所述,您可以使用Dp.toPx()进行转换。

在您的情况下,您可以避免构建自定义的Indication
您可以使用:

 val interactionSource = remember { MutableInteractionSource() }
 Modifier.clickable(
        interactionSource = interactionSource,
        indication = rememberRipple(
             radius = 4.dp,
             color=Color.Black.copy(alpha = 0.3f))
        ) 

你可以通过Dp,但你必须调整到屏幕的密度。扩展函数Dp.toPx()在密度作用域代码块内工作得很好。

val sizeInPx = with(LocalDensity.current) { 16.dp.toPx() }

可能迟到

val density : Density = LocalDensity.current
dpValue = with(density){ intValue.toDp() }

相关内容

  • 没有找到相关文章

最新更新