Compose中如何自定义Indication

class BoxDemo : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            CompositionLocalProvider(LocalIndication provides Indication01) {
                Box(
                    modifier = Modifier
                        .width(100.dp)
                        .clickable { }
                        .height(100.dp)
                ){
                    Text(text = "hello hi")
                }
            }
        }
    }
}

    private object Indication01 : Indication {

        private class DefaultDebugIndicationInstance(
            private val isPressed: State<Boolean>,
            private val isHovered: State<Boolean>,
            private val isFocused: State<Boolean>,
        ) : IndicationInstance {
            override fun ContentDrawScope.drawIndication() {
                if (isPressed.value) {
                    drawRect(color = Color.Blue.copy(alpha = 1.0f), size = size)
                } else if (isHovered.value || isFocused.value) {
                    drawRect(color = Color.Green.copy(alpha = 1.0f), size = size)
                }
                drawContent()
            }
        }

        @Composable
        override fun rememberUpdatedInstance(interactionSource: InteractionSource): IndicationInstance {
            val isPressed = interactionSource.collectIsPressedAsState()
            val isHovered = interactionSource.collectIsHoveredAsState()
            val isFocused = interactionSource.collectIsFocusedAsState()
            return remember(interactionSource) {
                DefaultDebugIndicationInstance(isPressed, isHovered, isFocused)
            }
        }
    }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值