オートフォーカス機能

Android アプリでカメラのオートフォーカス機能を実装する方法について説明します。
オートフォーカス機能は、Android の Camera クラスで提供されているのでそれを使用します。
Camera クラスの auroFocus メソッドを呼び出せばオートフォーカスを実施できます。

権限 (AndroidManifest) の設定

オートフォーカス機能がついていない端末で、Play ストアからインストールできないようにするために、以下の記述を追加します。

<uses-feature android:name="android.hardware.autofocus"/>

※ 上記は、AndroidManifest.xml ファイルの <application> タグの前に記述します。

レイアウトリソースファイル (xml ファイル) の記述

基本的なカメラの制御 からの変更はありません。

画像を表示するためのプレビュークラス (CameraPreview.java)

基本的なカメラの制御 からの変更はありません。

メインの画面クラス (SimpleCameraSampleActivity.java)

画像の撮影と保存 では、画面タッチ時に takePicture メソッドを呼び出して画像の撮影と保存を行っていましたが、今回は画面タッチでオートフォーカス機能を呼び出し、オートフォーカス完了時に、takePicture メソッドで画像を取得して保存するようにします。

それ以外の部分は、画像の撮影と保存 から変更はありません。

// mCamPreview に タッチイベントを設定
mCamPreview.setOnTouchListener(new OnTouchListener() {
	public boolean onTouch(View v, MotionEvent event) {
        if (mIsTake) {
            return true;
        }

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // 撮影中の2度押し禁止用フラグ
            mIsTake = true;
            // オートフォーカス
            mCam.autoFocus(mAutoFocusListener);
        }
        return true;
    }
});

autoFocus メソッドの引数には、オートフォーカス完了時のコールバックを渡します。

/**
 * オートフォーカス完了のコールバック
 */
private Camera.AutoFocusCallback mAutoFocusListener = new Camera.AutoFocusCallback() {
    public void onAutoFocus(boolean success, Camera camera) {
        // 撮影
        mCam.takePicture(null, null, mPicJpgListener);
    }
};

success でオートフォーカスが成功したかがわかるので、失敗したときは撮影しない等の処理に使用できます。


カメラ (Camera) 関連の説明

基本的なカメラの制御
画像の撮影と保存
ズーム機能
カメラの設定