ズーム機能

Android アプリでカメラのズーム機能を実装する方法について説明します。
ズーム機能は、Android の Camera クラスで提供されているのでそれを使用します。
Camera クラスのパラメータを設定することによってズーム機能を実現します。

基本的なカメラの制御を元に、ズームボタンを追加し、 ズームボタンをクリックすることでズームイン、ズームアウトを行います。

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

基本的なカメラの制御 にズームコントロールを追加します。
追加後のリソースファイルは以下のようになります。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/cameraPreview"
  android:layout_height="match_parent"
  android:layout_width="match_parent"
/>
<ZoomControls
  android:id="@+id/zoomControls1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="right"
/>

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

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

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

ズームコントロールのズームインボタンクリックでズームイン処理を、ズームアウトボタンクリックでズームアウト処理を行います。 ズームイン・ズームアウトは Camera クラスのプロパティを設定します。

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    // フルスクリーン設定
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.main);

    // カメラインスタンスの取得
    try {
        mCam = Camera.open();
    } catch (Exception e) {
        //
    }

    // FrameLayout に CameraView クラスを設定
    FrameLayout preview = (FrameLayout)findViewById(R.id.cameraPreview);
    CameraView cameraView = new CameraView(this, mCam);
    preview.addView(cameraView);
    
    // ズームコントロールを取得
    ZoomControls zoomCtr = (ZoomControls)findViewById(R.id.zoomControls1);        
    // ズームイン
    zoomCtr.setOnZoomInClickListener(new OnClickListener() {
        public void onClick(View v) {
            Camera.Parameters prm = mCam.getParameters();
            int nowZoom = prm.getZoom();
            if (nowZoom < prm.getMaxZoom()) {
                prm.setZoom(nowZoom + 1);
            }
            mCam.setParameters(prm);
        }
    });        
    // ズームアウト
    zoomCtr.setOnZoomOutClickListener(new OnClickListener() {
        public void onClick(View v) {
            Camera.Parameters prm = mCam.getParameters();
            int nowZoom = prm.getZoom();
            if (nowZoom > 0) {
                prm.setZoom(nowZoom - 1);
            }
            mCam.setParameters(prm);
        }
    });
    
    @Override
    protected void onPause() {
        super.onPause();
        // カメラ破棄インスタンスを解放
        if (mCam != null) {
            mCam.release();
            mCam = null;
        }
    }
}

Camera クラスの getParameters メソッドでパラメータを取得します。Parameters クラスの getZoom メソッドで、現在のズーム値を取得し、 setZoom メソッドでズームを設定します。 


カメラ (Camera) 関連の説明

基本的なカメラの制御
画像の撮影と保存
オートフォーカス機能
カメラの設定