CameraX: CameraView触ってみた

CameraXのコードが公開されていたので、その中にあったCameraViewを触ってみました。まだ、alphaであることからAPIは大きく変わる可能性があります。

内部の実装であったり、細かい部分はpsideさんの「CameraXのコードがきたので気合い入れて読んでみた」が詳しいです。

環境構築

CameraViewはまだ公開されていないため、ソースコードからビルドする必要があります。また、設定でpublishフラグがfalseになっているので、trueにしてビルドします。

 androidx {
     name = "Jetpack Camera View Library"
-    publish = false
+    publish = true
     mavenVersion = LibraryVersions.CAMERA
     mavenGroup = LibraryGroups.CAMERA
     inceptionYear = "2019"
 }

使い方

CameraViewは普通のViewのように使うことができます。

<androidx.constraintlayout.widget.ConstraintLayout
  ...>

  <androidx.camera.view.CameraView
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

次に初期化をします。

cameraView.bindToLifecycle(this) // thisはLifecycleOwner

LifecycleOwnerとCameraViewを結びつけることでLifecycleに合わせて自動でリソースを調整してくれます。 CameraViewはLifecycle-Aware Componentとなっています。非常に扱いやすそうです。

これだけでカメラ機能が使えるようになります!とても簡単!!

以下、CameraViewで現状使えるAPIについて紹介します。

CameraViewで使えるAPI達

モードの変更

CameraViewでは次の3つのモードがあります。

次のように使います。

// Image
cameraView.captureMode = CameraView.CaptureMode.IMAGE
cameraView.takePicture(...)

// Video
cameraView.captureMode = CameraView.CaptureMode.VIDEO
cameraView.startRecording(...)
cameraView.stopRecording()

ScaleTypeの設定

Scaleを設定することができます。

次のように使います。

cameraView.scaleType = CameraView.ScaleType.CENTER_INSIDE

LensFacingの切り替え

cameraView.toggleCamera()

// or

cameraView.setCameraByLensFacing(CameraX.LensFacing.FRONT)
cameraView.setCameraByLensFacing(CameraX.LensFacing.BACK)

Flashモードの設定

撮影時にフラッシュを有効にすることができます。

cameraView.flash = FlashMode.ON
cameraView.flash = FlashMode.OFF

torchの有効/無効

背面ライトを有効にすることができます。

cameraView.enableTorch(true)
cameraView.enableTorch(false)

zoomの設定

コードから変えることができます。

cameraView.zoomLevel = 3f
cameraView.zoomLevel = 10f

また、CameraViewはpinch-in-outでのzoomの変更にも対応しています。

focus

指定した部分にfocusを合わせることができます。

cameraView.focus(...)

まとめ

最後に、CameraViewを実装した結果になります。

Written by