我已经被这个问题困扰了好几天了。
我在Kotlin上关注了这个Android的官方相机样本:
android's camera-sample
我于2020年2月11日在github issue上提出了一个问题,但尚未收到任何反馈。
我的问题是:
我按原样使用了示例,仅将前置摄像头的val cameraId = manager.cameraIdList[0]
更改为val cameraId = manager.cameraIdList[1]
。
注意:在后置摄像头中不会发生这种情况。
前置摄像头无法正常工作,并在其上显示黑条
测试的设备:
我想要全屏 View ,因此当我在下面的注释行中未设置
AutoTextureView
的宽高比时,该视频将全屏显示,但现在被拉伸(stretch)了。if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//I only have portrait mode
} else {
//textureView.setAspectRatio(previewSize.height, previewSize.width)
}
有没有一种方法可以设置全屏模式而不进行任何拉伸(stretch)或设置正确的纵横比?
我一直在通过以下松弛的解决方案,但没有一个对我有用:
Camera 2 : Unable to record video in full screen?
Camera2 API Make Preview Fill Entire View
Android Camera2 API stretching the preview
最佳答案
工作几天后。 Camera2 full screen preview and image capture帮助我解决了这个问题。
将onMeasure
中的AutoFitTextureView
设置为:
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val width = View.MeasureSpec.getSize(widthMeasureSpec)
val height = View.MeasureSpec.getSize(heightMeasureSpec)
if (ratioWidth == 0 || ratioHeight == 0) {
setMeasuredDimension(width, height)
} else {
if (width > ((height * ratioWidth) / ratioHeight)) {
setMeasuredDimension(width, (width * ratioHeight) / ratioWidth)
} else {
setMeasuredDimension((height * ratioWidth) / ratioHeight, height)
}
}
}
所以我在
configureTransform(viewWidth: Int, viewHeight: Int)
中翻译如下 // adjust the x and y to centre the preview
val screenWidth = resources.displayMetrics.widthPixels
val xShift = (viewWidth - screenWidth)/2
val screenHeight = resources.displayMetrics.heightPixels
val yShift = (viewHeight - screenHeight)/2
matrix.setTranslate(-xShift.toFloat(), -yShift.toFloat())
textureView.setTransform(matrix)
关于android - 使用camera2 API在前置摄像头中进行全屏视频录制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60824076/