オートフォーカス機能
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) 関連の説明
⇒ 基本的なカメラの制御
⇒ 画像の撮影と保存
⇒ ズーム機能
⇒ カメラの設定