CameraX: CameraView触ってみた
Created at Mon, May 6, 2019CameraXのコードが公開されていたので、その中にあった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: 写真を取る
- Video: ビデオを取る
- Mixed: 両方。ただし、動かない端末もあるらしい
次のように使います。
// Image
cameraView.captureMode = CameraView.CaptureMode.IMAGE
cameraView.takePicture(...)
// Video
cameraView.captureMode = CameraView.CaptureMode.VIDEO
cameraView.startRecording(...)
cameraView.stopRecording()
ScaleTypeの設定
Scaleを設定することができます。
- CENTER_CROP
- CENTER_INSIDE
次のように使います。
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は柔軟性がない代わりに、簡単にカメラの機能を使うことが出来る
- とはいえ、基本的な機能は揃っていそう
最後に、CameraViewを実装した結果になります。