android - 如何将 CameraView 与 Jetpack Compose 一起使用?
问题描述
目前 Compose 中没有相当于 CameraView(和 PreviewView)的功能。是否可以将其包装并以组合布局显示?
解决方案
仍然没有可组合的 CameraX。您需要使用AndroidView
来创建一个。
Compose 1.0.0-beta02 的更新示例:
@Composable
fun CameraPreview(
modifier: Modifier = Modifier,
cameraSelector: CameraSelector = CameraSelector.DEFAULT_BACK_CAMERA,
scaleType: PreviewView.ScaleType = PreviewView.ScaleType.FILL_CENTER,
) {
val lifecycleOwner = LocalLifecycleOwner.current
AndroidView(
modifier = modifier,
factory = { context ->
val previewView = PreviewView(context).apply {
this.scaleType = scaleType
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
// Preview is incorrectly scaled in Compose on some devices without this
implementationMode = PreviewView.ImplementationMode.COMPATIBLE
}
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
// Preview
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
try {
// Must unbind the use-cases before rebinding them.
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner, cameraSelector, preview
)
} catch (exc: Exception) {
Log.e(TAG, "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(context))
previewView
})
}
推荐阅读
- sql - 具有不同权重的随机项目的无限滚动算法(显示给用户的概率)
- azure - Azure:将来自不同子域和 URL 的流量路由到不同的后端端口
- html - 后代组合器和后续兄弟组合器有什么区别?
- iot - 从 Azure 设备 sdk 获取孪生
- angular - 如何简化禁用/启用控制角度
- google-apps-script - 如何使用 AppScript 加速将过滤后的数据集从一个 Google 电子表格传输到另一个 Google 电子表格
- c++ - 使用下拉列表小部件时如何返回函数值
- sql - 如何从 GROUP BY 中获取最大日期 - ORACLE
- mysql - 为什么 node.js 会出现以下错误?
- asp.net - 变量 cn 在赋值之前使用。在带有 VB 的 asp.net 中