在谷歌地图中使用可组合而不是标记



我知道可以在谷歌地图中使用自定义视图而不是基本的地图标记来完成这个答案中描述的操作。我很好奇Compose是否有可能达到类似的效果?

由于ComposeView是最后一个类,无法直接扩展,所以我想有一个FrameLayout,可以将其作为子类添加。尽管这似乎导致了一种竞争状况,因为可组合的绘画与正常的androidViews略有不同。

class MapMarkerView : FrameLayout {
constructor(context: Context) : super(context) {
initView()
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
initView()
}
private fun initView() {
val composeView = ComposeView(context).apply {
layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
}
composeView.setContent {
// this runs asynchronously making the the bitmap generation not include composable at runtime?
Text(text = "2345", modifier = Modifier.background(Color.Green, RoundedCornerShape(4.dp)))
}
addView(composeView)
}
}

我读过的大多数文章都有一些回调函数,用于生成这样的位图,在这种情况下不一定有效,因为每个视图都是动态生成的,需要立即转换为映射的位图。

您尝试创建的MapMarkerViewViewGroup的间接子级。ComposeView也是ViewGroup的间接子级,这意味着您可以在打算使用此类的地方直接替换ComposeViewComposeView类并不意味着要进行子类化。作为开发人员,您真正需要关心的唯一一件事就是它的setContent方法。
val composeView: View = ComposeView(context).apply{
setContent {
Text(text = "2345", modifier = Modifier.background(Color.Green, RoundedCornerShape(4.dp)))
}
}

现在,您可以在代码中用这个composeView替换MapMarkerView,甚至可以在需要View或其任何子类的任何位置使用它。

相关内容

  • 没有找到相关文章

最新更新