我正在开发一个Android应用,该应用必须在LinearLayout中显示相机。我正在创建一个带有SurfaceView和Camera2对象的片段。经过大量工作后,我可以在表面视图上显示相机,但是尺寸有问题。
相机的图像开始只显示一部分,其余的只是黑屏。我尝试定义surfaceChanged使用setFixedSize给我的宽度和高度,但出现此错误
尺寸为(w = 516,h = 828)且格式为0x4的表面无效,尺寸不在有效集中:[1440x1080、1280x720、960x720、880x720、960x540、720x540、800x480、720x480、640x480、528x432、352x288 ,320x240,176x144]
如果我在消息中定义了一些尺寸,我可以得到相机图像,但不能得到整个表面上的一部分,其余部分是黑色的。
我不知道自己在做什么错。
这是我的布局
<LinearLayout
android:id="@+id/contenedor1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</LinearLayout>
这是我获取有效设备尺寸的方法。我在列表中排名第一,但尝试了所有可用尺寸
val map = cameraCharacteristics!!.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)
medida= map.getOutputSizes(SurfaceHolder::class.java)[0]
w=medida.width
h=medida.height
然后我用
设置大小override fun surfaceCreated(p0: SurfaceHolder?) {
p0!!.setFixedSize(w,h)
Superficie = p0!!.surface
}