今回は CameraX にズーム機能を追加する方法を解説します。これから CameraX でカメラアプリを作る方は、ぜひ、参考にして時間を節約してください。
※なお、CameraX によるカメラアプリの作り方の基本形は、以下の2つの記事を参考としていただければと思います。
~ ポイント解説 ~
CameraX でズーム機能を使用する方法は2つあります。
ひとつは、取得した CameraControl に「setLinearZoom」で「0.0f~1.0f」のフロート値をセットする方法で、もうひとつは、同じく、取得した CameraControl に「setZoomRatio」で任意のズーム値をセットする方法ですが、後者は機種ごとにセットするズーム値が異なり、その値の取得に少し手間がかかるので今回は「setLinearZoom」を使用します。
(例)
setLinearZoom( 0.5f ) ※ズーム率50%を指定
setLinearZoom( 1.0f ) ※ズーム率100%を指定
~ 手順 ~
① CameraControl を宣言します。
private lateinit var cameraControl: CameraControl
② Camera から CameraControl を取得します。Camera(camera) は プレビューを開始する fun { } の中ので取得することができます。
camera = cameraProvider.bindToLifecycle(
this,
cameraSelector,
preview,
imageCapture,
videoCapture
)
//CameraControl 取得
cameraControl = camera.CameraControl
③ CameraControl(cameraControl)にズーム率(0.0f~1.0f)をセットするとズームします。
cameraControl.setLinearZoom(0.3f) //この例はズーム率30%
以下のようにすると任意のボタンでズーム率を変更することができます。
なお、ボタンを押し続けるとズーム率が 0.0f~1.0f 以外となりますが、ズーム率が範囲を超えた場合(-2.0や13.0などなった場合)は無視されるだけで、アプリが強制終了することはありません。
var zoom: Float = 0.0f
//10% ズームイン
viewBinding.zoomInButton.setOnClickListener {
zoom += 0.1f
cameraControl.setLinearZoom(zoom)
}
//10% ズームアウト
viewBinding.zoomInButton.setOnClickListener {
zoom -= 0.1f
cameraControl.setLinearZoom(zoom)
}
備考・まとめ
カメラアプリをより使いやすくするために、ズーム率はボタン以外にも、スライダーやピンチ(イン・アウト)動作で変更できるようにすると良いでしょう。
※スライダーとピンチ動作でズーム率を変更する方法は、後日ご紹介する予定です。
END