- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图使用 CameraX PreviewView
Composable
的内部通过 AndroidView
,但预览被拉伸(stretch),右半部分被剪裁,正如您在 screenshot 中看到的那样.
然而, View 似乎占据了正确的空间。
此问题仅在纵向模式下发生。
我能够在两部手机和模拟器上重现这个问题,所以我怀疑它是特定于硬件的。
我尝试了不同的比例类型,但这似乎并不影响拉伸(stretch)。
我会报告一个错误,但我不确定这是 compose 还是 cameraX 中的错误。
请参阅下面我使用的代码:
package com.example.camerapreview
import android.Manifest
import android.graphics.Color
import android.os.Bundle
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.widget.LinearLayout
import androidx.activity.ComponentActivity
import androidx.activity.compose.registerForActivityResult
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
import androidx.camera.core.AspectRatio.RATIO_16_9
import androidx.camera.core.CameraSelector
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.content.ContextCompat
import androidx.lifecycle.LifecycleOwner
import com.example.pointergun.ui.theme.PointerGunTheme
import com.google.common.util.concurrent.ListenableFuture
import androidx.camera.core.Preview
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
setContent {
PointerGunTheme {
Surface(color = MaterialTheme.colors.background) {
var isPermissionGranted by remember {
mutableStateOf<Boolean?>(null)
}
val launcher =
registerForActivityResult(contract = ActivityResultContracts.RequestPermission()) { isGranted ->
isPermissionGranted = isGranted
}
when (isPermissionGranted) {
true -> CameraPreview(cameraProviderFuture)
false -> Text("permission pls")
null -> Button(onClick = { launcher.launch(Manifest.permission.CAMERA) }) {
Text(text = "Start!")
}
}
}
}
}
}
}
fun bindPreview(
cameraProvider: ProcessCameraProvider,
lifecycleOwner: LifecycleOwner,
previewView: PreviewView,
) {
val preview: Preview = Preview.Builder()
.setTargetAspectRatio(RATIO_16_9)
.build()
val cameraSelector: CameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
preview.setSurfaceProvider(previewView.surfaceProvider)
var camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview)
}
@Composable
fun CameraPreview(cameraProviderFuture: ListenableFuture<ProcessCameraProvider>) {
val lifecycleOwner = LocalLifecycleOwner.current
AndroidView(
factory = { context ->
PreviewView(context).apply {
setBackgroundColor(Color.GREEN)
layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
scaleType = PreviewView.ScaleType.FILL_START
post {
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()
bindPreview(
cameraProvider,
lifecycleOwner,
this,
)
}, ContextCompat.getMainExecutor(context))
}
}
}
)
}
最佳答案
需要设置implementation mode对于预览 View
implementationMode = PreviewView.ImplementationMode.COMPATIBLE
在你的情况下:
PreviewView(context).apply {
setBackgroundColor(Color.GREEN)
layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
scaleType = PreviewView.ScaleType.FILL_START
implementationMode = PreviewView.ImplementationMode.COMPATIBLE
post {
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()
bindPreview(
cameraProvider,
lifecycleOwner,
this,
)
}, ContextCompat.getMainExecutor(context))
}
}
关于android - 如何在 jetpack compose 中使用 PreviewView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66732570/
我正在制作一个应用程序,其中有两个文件 CameraVC.swift import UIKit class CameraVC: CameraViewController { @IBOutlet wea
我正在尝试使用 androidx.camera 包创建一个按需功能模块。当 Activity 使包含 PreviewView 的布局膨胀时,我遇到了崩溃。请注意,如果我只使用像 TextView 这样
我有一个 PreviewView 实例,我想根据使用 Firebase 和 Image Analyzer 用例的对象标识在该实例上绘制一个矩形。 但是,与 Text/SurfaceView 不同,Pr
我遵循了这些教程: https://developer.android.com/training/camerax/preview , https://proandroiddev.com/update-
camerax cameraView 和 previewView 有什么区别?因为我找不到关于比较 2 个 View 以预览 camerax 的资源或文章 最佳答案 PreviewView 是一个自定
免责声明:我知道 this question 的存在,但它目前仍未解决,我正在尝试提供额外的信息,而不是用无论如何都无法解决问题的无用答案污染那个信息。 我有一个带有默认镜像的前置摄像头的自定义设备,
谁能告诉我如何在cameraX预览上绘制一个矩形?我尝试按照过去用 kotlin 编写的堆栈溢出答案的建议实现自定义 View ,但是当我尝试将其转换为 Java 时,它似乎对我不起作用。 XML 文
我是 Andriod 的初学者,现在遇到问题。 如何使用 CameraX 和 ZXing 创建 QR 码扫描仪在 here 中进行了描述。和 here 。我正在尝试制作一个示例项目。 但是我的代码有错
我试图使用 CameraX PreviewView Composable 的内部通过 AndroidView ,但预览被拉伸(stretch),右半部分被剪裁,正如您在 screenshot 中看到的
我有一个简单的设置: preview = new Preview.Builder().build(); preview.setSurfaceProvider(mPreviewView.createSu
我正在尝试使用图像捕获中包含的叠加层来捕获图片。我能够将覆盖设置为 previewView使用 cameraView.overlay.add(binding.textView) .但是,当尝试使用 i
我正在尝试通过动画实现效果,但只有在预览 View 处于 Activity 状态后才能实现。原因之一也是为了避免相机绑定(bind)后出现闪烁。 我已经设法使用反射 (androidx.camera.
我有一个 PreviewView除了工具栏外,它占据了整个屏幕。 相机的预览效果很好,但是当我捕捉图像时,纵横比完全不同。 我想在成功捕获图像后将图像显示给用户,因此它与 PreviewView 的大
这是我的代码,我遇到了错误。请检查并告诉我如何解决这个问题。 func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMar
我想在没有任何 xml 和 PreviewView 或其他显示图片的情况下使用 CameraX 拍照,但我有问题。 最佳答案 你应该使用Camera2,这个问题是错误的 关于android - 如何在
我正在使用 Google 的 API2 相机,但我的代码遇到了一些问题。我有两个不同的 CameraSession,一个用于视频,另一个用于图像。为了更高效地执行此操作,我更改了代码以使用唯一的 Se
我是一名优秀的程序员,十分优秀!