为什么应用程序崩溃时,我试图使用定时器启动原生画布.drawText定期与Jetpack撰写?



我希望调用nativeCanvas。使用Jetpack Compose周期性地绘制文本。

但是当我运行代码A时,我得到结果A。

1:我的代码怎么了?

2: How can I native画布。

代码

@Composable
fun ScreenHome_Watch(
){
Box(        
) {        
Canvas(             
) {    
startTimer{
drawIntoCanvas {
it.nativeCanvas.drawText("Hello "+Calendar.getInstance().time.toString() ,10f,10f, paintText)
}
}
}
}
}
private lateinit var timer: Timer
fun startTimer(block: ()->Unit) {
timer = Timer()
timer.scheduleAtFixedRate(timerTask {
block()
}, 0, 1000)
}

结果

java.lang.ClassCastException: androidx.compose.ui.graphics.drawscope.EmptyCanvas cannot be cast to androidx.compose.ui.graphics.AndroidCanvas

不需要破坏组合的机制。您必须更改状态,compose将处理更改

@Composable
fun ScreenHome_Watch() {
var currentTime by remember { mutableStateOf(Calendar.getInstance().time) }
val paint = remember {
Paint().apply {
isAntiAlias = true
textSize = 24f
typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD)
}
}
Canvas(modifier = Modifier.size(height = 20.dp, width = 180.dp)) {
drawIntoCanvas {
it.nativeCanvas.drawText(
"Hello $currentTime", 30f, 30f, paint
)
}
}
LaunchedEffect(Unit) {
while (true) {
currentTime = Calendar.getInstance().time
delay(1000)
}
}
}

最新更新