最終更新:
moonlight_aska 2015年04月10日(金) 00:30:01履歴
カメラのズーム機能を使用するには, カメラパラメータ(Camera.Parameters)を使用する.
「プレビュー画像を表示する」を参照して, カメラでプレビュー画像を表示できるようにする.

注) SHARP SHL-22では, Camera.Parameters#getXXXメソッドで設定値がうまくとれない場合があり, 正常に動作せず.
- src/MainActivity.java
- ズームイン
- Camera#getParametersメソッドで, Camera.Parametersのインスタンスを取得する.
- Camera.Parameters#isZoomSupportedメソッドで, ズーム機能をサポートしているかチェックする.
- Camera.Parameters#getZoomメソッドで, 現在のズーム値を取得する.
- Camera.Parameters#getMaxZoomメソッドで, 設定可能なズーム値の最大値を取得し, さらにズーム可能かチェックする.
- Camera.Parameters#setZoomメソッドで, ズーム値を現在の値+1に設定する.
- Camera#setParametersメソッドで, Camera.Parametersを設定する.
- ズームアウト
- ズームイン処理とほぼ同じ.
- ズームイン
package com.moonlight_aska.android.camera02;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ZoomControls;
public class MainActivity extends Activity implements SurfaceHolder.Callback {
private Camera mCamera = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView preview = (SurfaceView)findViewById(R.id.preview_id);
SurfaceHolder holder = preview.getHolder();
holder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
// カメラオープン
mCamera = Camera.open();
// ズームコントロール
ZoomControls zoomCtrl = (ZoomControls)findViewById(R.id.zoom_id);
// ズームイン
zoomCtrl.setOnZoomInClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("CameraZoom", "ZoomIn");
// パラメータ取得
Camera.Parameters params = mCamera.getParameters();
if (params.isZoomSupported()) {
int currZoom = params.getZoom();
if (currZoom < params.getMaxZoom()) {
params.setZoom(currZoom + 1);
Log.v("CameraZoom", "Zoom = " + (currZoom+1));
// パラメータ設定
mCamera.setParameters(params);
}
}
}
});
// ズームアウト
zoomCtrl.setOnZoomOutClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("CameraZoom", "ZoomOut");
// パラメータ取得
Camera.Parameters params = mCamera.getParameters();
if (params.isZoomSupported()) {
int currZoom = params.getZoom();
if (currZoom > 0) {
params.setZoom(currZoom - 1);
Log.v("CameraZoom", "Zoom = " + (currZoom-1));
// パラメータ設定
mCamera.setParameters(params);
}
}
}
});
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
mCamera.stopPreview();
// プレビュー画面のサイズ設定
Camera.Parameters params = mCamera.getParameters();
List<Size> previewSizes = params.getSupportedPreviewSizes();
Size size = previewSizes.get(0);
params.setPreviewSize(size.width, size.height);
mCamera.setParameters(params);
// プレビュー開始
mCamera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
- 動作例

注) SHARP SHL-22では, Camera.Parameters#getXXXメソッドで設定値がうまくとれない場合があり, 正常に動作せず.
コメントをかく