簡體   English   中英

如何在 Camera X 庫中以編程方式更改相機鏡頭朝向?

[英]how to change camera lens facing programmatically in Camera X library?

目前我正在使用這個 gradle

implementation "androidx.camera:camera-camera2:1.0.0-beta11"
implementation "androidx.camera:camera-lifecycle:1.0.0-beta11"
implementation "androidx.camera:camera-view:1.0.0-alpha18"

所以我想在用戶點擊按鈕后以編程方式更改相機鏡頭。 這是我嘗試使用的代碼

class CameraFragment : Fragment() {

    private var cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

    lateinit var mContext: Context
    lateinit var mActivity: FragmentActivity

    override fun onAttach(context: Context) {
        super.onAttach(context)

        mContext = context
        activity?.let { mActivity = it }

    }

    private fun toggleFrontBackCamera() {


        if (cameraSelector == CameraSelector.DEFAULT_BACK_CAMERA) {
            cameraSelector = CameraSelector.DEFAULT_FRONT_CAMERA
        } else if (cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA) {
            cameraSelector == CameraSelector.DEFAULT_BACK_CAMERA
        }

        startCamera()


    }

    private fun startCamera() {
        val cameraProviderFuture = ProcessCameraProvider.getInstance(mContext)

        cameraProviderFuture.addListener(Runnable {
            // Used to bind the lifecycle of cameras to the lifecycle owner
            val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

            // Preview
            val preview = Preview.Builder()
                    .build()
                    .also {
                        it.setSurfaceProvider(previewView.surfaceProvider)
                    }


            imageCapture = ImageCapture.Builder().build()


            try {
                // Unbind use cases before rebinding
                cameraProvider.unbindAll()

                // Bind use cases to camera
                cameraProvider.bindToLifecycle(
                        this, cameraSelector, preview, imageCapture)

            } catch (exc: Exception) {
                Log.e(TAG, "Use case binding failed", exc)
            }

        }, ContextCompat.getMainExecutor(mContext))
    }


}

我使用該toggleFrontBackCamera()方法以編程方式更改鏡頭。

如您所見,默認攝像頭是后置攝像頭,然后當用戶點擊按鈕更改攝像頭時,第一次調用toggleFrontBackCamera()方法,然后攝像頭將從 Back 變為 Front。 這里沒有問題

但問題是,當用戶想再次更換相機鏡頭時,從前后相機,然后toggleFrontBackCamera()將不起作用,它卡在CameraSelector.DEFAULT_FRONT_CAMERA

那么如何以編程方式更改它?

在開始時初始化一個變量:

private var lensFacing = CameraSelector.LENS_FACING_BACK

將您的相機切換方法更改為:

private fun toggleFrontBackCamera() {
    lensFacing = if (CameraSelector.LENS_FACING_FRONT == lensFacing)
        CameraSelector.LENS_FACING_BACK
    else 
        CameraSelector.LENS_FACING_FRONT
    startCamera()
}

最后創建的實例CameraSelectorstartCamera()並在使用此cameraProvider.bindToLifecycle()

val cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM