[英]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()
}
最后創建的實例CameraSelector
在startCamera()
並在使用此cameraProvider.bindToLifecycle()
val cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.