我已经被这个问题困扰了好几天了。

我在Kotlin上关注了这个Android的官方相机样本:
android's camera-sample

我于2020年2月11日在github issue上提出了一个问题,但尚未收到任何反馈。

我的问题是:

我按原样使用了示例,仅将前置摄像头的val cameraId = manager.cameraIdList[0]更改为val cameraId = manager.cameraIdList[1]
注意:在后置摄像头中不会发生这种情况。

前置摄像头无法正常工作,并在其上显示黑条
测试的设备:

  • 仿真器:Pixel C API 29
  • 设备:Galaxy Tab S2
  • 模式:人像

  • android - 使用camera2 API在前置摄像头中进行全屏视频录制-LMLPHP

    我想要全屏 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/

    10-10 07:52