Justin Yue
08/16/2021, 5:24 PMJustin Yue
08/16/2021, 5:25 PM@androidx.compose.ui.tooling.preview.Preview
@Composable
fun CameraPreviewPreview() {
val imageCapture = ImageCapture.Builder().build()
CameraPreview(imageCapture = imageCapture)
}
@Composable
fun CameraPreview(imageCapture: ImageCapture) {
val lifecycleOwner = LocalLifecycleOwner.current
val context = LocalContext.current
val cameraProviderFuture = remember { ProcessCameraProvider.getInstance(context) }
AndroidView(
factory = { ctx ->
val previewView = PreviewView(ctx).apply {
implementationMode = PreviewView.ImplementationMode.COMPATIBLE
}
val executor = ContextCompat.getMainExecutor(context)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
preview,
imageCapture,
)
}, executor)
previewView
},
)
}
Chris Sinco [G]
08/16/2021, 5:31 PMJustin Yue
08/16/2021, 5:35 PMJustin Yue
08/16/2021, 5:36 PM@androidx.compose.ui.tooling.preview.Preview
@Composable
fun CameraPreviewPreview() {
val imageCapture = ImageCapture.Builder().build()
CameraPreview(imageCapture = imageCapture, modifier = Modifier.fillMaxSize())
}
@Composable
fun CameraPreview(imageCapture: ImageCapture, modifier: Modifier = Modifier) {
val lifecycleOwner = LocalLifecycleOwner.current
val context = LocalContext.current
val cameraProviderFuture = remember { ProcessCameraProvider.getInstance(context) }
AndroidView(
factory = { ctx ->
val previewView = PreviewView(ctx).apply {
implementationMode = PreviewView.ImplementationMode.COMPATIBLE
}
val executor = ContextCompat.getMainExecutor(context)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build().also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
preview,
imageCapture,
)
}, executor)
previewView
},
modifier // <- adding a modifier with .fillMaxSize() fixed the issue
)
}
Chris Sinco [G]
08/16/2021, 5:39 PMChris Sinco [G]
08/16/2021, 5:39 PMJustin Yue
08/16/2021, 5:40 PMJustin Yue
08/16/2021, 5:41 PMChris Sinco [G]
08/16/2021, 5:43 PMNick
08/18/2021, 7:40 PMjava.lang.IllegalStateException: It is not allowed to create new threads in the preview
Are you also seeing this? Maybe it’s related?Justin Yue
08/18/2021, 7:43 PMNick
08/18/2021, 7:44 PMJustin Yue
08/18/2021, 7:46 PMNick
08/18/2021, 7:46 PMJustin Yue
08/18/2021, 7:50 PMNick
08/18/2021, 8:30 PM