CameraX:如何显示 16:9 比例预览?
CameraX : how to display a 16:9 ratio preview?
我目前正在尝试使用 Android Jetpack 的新 cameraX 库开发 QRCode 扫描仪。我使用最新的可用版本:1.0.0-alpha06
在 CameraXBasic 示例 (https://github.com/android/camera-samples/tree/master/CameraXBasic) 中,将 cameraX 库版本从 1.0.0-alpha05 更新到 1.0.0-alpha06 后,我尝试改为显示 16:9 比例预览全屏的。
为此,我更新了 fragment_camera.xml
布局,以便 "force" TextureView
的比例方面:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/camera_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
>
<TextureView
android:id="@+id/view_finder"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="16:9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
预览看起来不错:
现在,我已将代码更新为 CameraFragment
class 以便使用新的 AspectRatio
枚举。
现在,相机预览配置如下所示:
val viewFinderConfig = PreviewConfig.Builder().apply {
setLensFacing(lensFacing)
// We request aspect ratio but no resolution to let CameraX optimize our use cases
setTargetAspectRatio(AspectRatio.RATIO_16_9)
// Set initial target rotation, we will have to call this again if rotation changes
// during the lifecycle of this use case
setTargetRotation(viewFinder.display.rotation)
}.build()
不幸的是,结果看起来像 1:1 比率而不是 16:9 比率:
如果我使用 AspectRatio.RATIO_4_3
值而不是 AspectRatio.RATIO_16_9
结果看起来不错 :
是库问题还是我使用 AspectRatio.RATIO_16_9
值实现的问题?
提前感谢您的帮助!
问题直接进库了。最新的alpha (alpha-08) 已经没有这个问题了。
我目前正在尝试使用 Android Jetpack 的新 cameraX 库开发 QRCode 扫描仪。我使用最新的可用版本:1.0.0-alpha06
在 CameraXBasic 示例 (https://github.com/android/camera-samples/tree/master/CameraXBasic) 中,将 cameraX 库版本从 1.0.0-alpha05 更新到 1.0.0-alpha06 后,我尝试改为显示 16:9 比例预览全屏的。
为此,我更新了 fragment_camera.xml
布局,以便 "force" TextureView
的比例方面:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/camera_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
>
<TextureView
android:id="@+id/view_finder"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="16:9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
预览看起来不错:
现在,我已将代码更新为 CameraFragment
class 以便使用新的 AspectRatio
枚举。
现在,相机预览配置如下所示:
val viewFinderConfig = PreviewConfig.Builder().apply {
setLensFacing(lensFacing)
// We request aspect ratio but no resolution to let CameraX optimize our use cases
setTargetAspectRatio(AspectRatio.RATIO_16_9)
// Set initial target rotation, we will have to call this again if rotation changes
// during the lifecycle of this use case
setTargetRotation(viewFinder.display.rotation)
}.build()
不幸的是,结果看起来像 1:1 比率而不是 16:9 比率:
如果我使用 AspectRatio.RATIO_4_3
值而不是 AspectRatio.RATIO_16_9
结果看起来不错 :
是库问题还是我使用 AspectRatio.RATIO_16_9
值实现的问题?
提前感谢您的帮助!
问题直接进库了。最新的alpha (alpha-08) 已经没有这个问题了。