最終更新: moonlight_aska 2015年04月05日(日) 14:42:22履歴
カメラのプレビュー画像の表示には, サーフェイスビュー(SurfaceView)を使用する.
- src/Camera02.java
- SurfaceViewのインスタンスを取得する.
- SurfaceHolderを取得し, コールバック関数を登録する.
- SurfaceHolderのタイプを設定する.
- SurfaceHolder.CallbackインタフェースのsurfaceCreatedメソッドをオーバーライドする.
- Camera#openメソッドで, カメラをオープンする.
- Camera#setPreviewDisplayメソッドで, プレビュー画面を設定する.
- SurfaceHolder.CallbackインタフェースのsurfaceChangedメソッドをオーバーライドする.
- Camera#stopPreviewメソッドで, プレビューを停止する.
- Camera#getParametersメソッドで, Camera.Parametersのインスタンスを取得する.
- Parameters#getSupportedPreviewSizesメソッドで, サポートしているプレビューサイズを取得する.
- Parameters#setPreviewSizeメソッドで, パラメータにプレビューサイズを設定する.
- Camera#setParametersメソッドでパラメータを設定する.
- Camera#startPreviewメソッドで, プレビューを再開する.
- SurfaceHolder.CallbackインタフェースのsurfaceDestroyedメソッドをオーバーライドする.
- プレビュー中ならCamera#stopPreviewメソッドで, プレビューを停止する.
- Camera#releaseメソッドで, カメラのリソースを解放する.
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.view.SurfaceHolder;
import android.view.SurfaceView;
public class Camera02 extends Activity implements SurfaceHolder.Callback {
private Camera mCamera = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SurfaceView preview = (SurfaceView)findViewById(R.id.preview_id);
SurfaceHolder holder = preview.getHolder();
holder.addCallback(this);
// holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); ← API Level 11以降では不要
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
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;
}
}
- res/layout/main.xml
- SurfaceViewを配置する.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<SurfaceView android:id="@+id/preview_id"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
- AndroidManifest.xml
- カメラを使用するには, "android.permission.CAMERA"パーミッションを設定する.
- "android.hardware.camera"で, カメラ機能を備えたハードに限定する.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.moonlight_aska.android.camera02"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camere"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Camera02"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
コメントをかく