Kotlin
AndroidのカメラサポートライブラリのCameraXを使ってみました
Androidのカメラ制御は
カメラが対応している解像度の取得や
プレビュー解像度の設定、画面回転など
いくつか面倒なステップを踏む必要がありますが
それらを吸収してくれる公式ライブラリがCameraXです。
ライブラリの使用方法はGoogleのCameraXのドキュメントに記載されていますが、
実際に動かしてみたコードを以下に記載します。
MainActivityにカメラプレビューを表示するだけの機能を持つアプリです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.camera.core.CameraSelector import androidx.camera.core.Preview import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.view.PreviewView import androidx.core.content.ContextCompat import androidx.lifecycle.LifecycleOwner import com.google.common.util.concurrent.ListenableFuture class MainActivity : AppCompatActivity() { private lateinit var cameraProviderFuture: ListenableFuture<ProcessCameraProvider> private lateinit var previewView : PreviewView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // PreviewView previewView = findViewById(R.id.cameraPreview) // CameraProvider リクエスト cameraProviderFuture = ProcessCameraProvider.getInstance(this) // タスクを実行するエグゼキューター val executor = ContextCompat.getMainExecutor(this) // リスナー用タスク val listenerRunnable = Runnable { // ListenableFutureからCameraProviderを取得 val cameraProvider = cameraProviderFuture.get() // ライフサイクルにバインド -カメラの指定とプレビューの設定も行う bindToLifecycle(cameraProvider) } // CameraProvider リクエスト のリスナーをセット cameraProviderFuture.addListener(listenerRunnable, executor) } private fun bindToLifecycle(cameraProvider: ProcessCameraProvider) { // Previewを作成 val preview : Preview = Preview.Builder().build() // 背面カメラを選択 val cameraSelector : CameraSelector = CameraSelector.Builder() .requireLensFacing(CameraSelector.LENS_FACING_BACK) .build() // Previewとレイアウト上のPreviewViewを接続 preview.setSurfaceProvider(previewView.surfaceProvider) // CameraProvider をライフサイクルにバインド val camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview) } } |
Kotlinで書いているのもありますが、
ライブラリを使用しない時と比べて、ぐっと必要なコード量が減っています。
画像の撮影や、画像分析もライブラリに含まれているようです。
水曜担当:Tanaka
tanaka at 2021年02月10日 10:00:37
AndroidでQRCodeを作成しよう
tanaka at 2020年08月19日 10:00:33
Android ダイアログを画面いっぱいに表示する
tanaka at 2020年04月22日 10:00:24
AndroidのViewをフェードイン(アウト)させる時に便利なAlphaAnimationクラス
tanaka at 2020年04月15日 10:00:37
Androidに表示する画像を動的に回転させる
tanaka at 2020年03月25日 10:00:35