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