今回はカメラの使い方について説明します。
とりあえず今回はSurfaceViewにカメラから得られる画像のプレビュー画面を表示するところまで紹介して、
撮影処理は次回ご紹介します。
作業手順として以下のようになります。
- マニフェストファイルにカメラのパーミッションを追加する
- レイアウトファイルにSurfaceViewを追加する
- プレビュー画面の実装
詳しくは続きからどうぞ。
マニフェストファイルにカメラのパーミッションを追加する
アプリケーションからカメラを使用するために、
マニフェストファイル(AndroidManifest.xml)に以下のコードを追記します。
<uses-permission android:name="android.permission.CAMERA" />
レイアウトファイルにSurfaceViewを追加する
プレビュー画面となるSurefaceViewをレイアウトファイル(main.xml)に記述します。
<SurfaceView android:id="@+id/surface_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
プレビュー画面の実装
続いてプレビュー画面の実装です。
プレビュー画面の実装にはSurfaceHolder.Callbackを使って、
SurfaceViewの生成時、破棄時、変更時に適切な処理を実装します。
package com.example.camera; import android.app.Activity; import android.os.Bundle; import android.hardware.Camera; import android.view.SurfaceView; import android.view.SurfaceHolder; public class CameraTest extends Activity { private Camera myCamera; private SurfaceHolder.Callback mSurfaceListener = new SurfaceHolder.Callback() { public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub myCamera = Camera.open(); try { myCamera.setPreviewDisplay(holder); } catch (Exception e) { e.printStackTrace(); } } public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub myCamera.release(); myCamera = null; } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub Camera.Parameters parameters = myCamera.getParameters(); parameters.setPreviewSize(width, height); myCamera.setParameters(parameters); myCamera.startPreview(); } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SurfaceView mySurfaceView = (SurfaceView)findViewById(R.id.surface_view); SurfaceHolder holder = mySurfaceView.getHolder(); holder.addCallback(mSurfaceListener); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } }
SurfaceViewのコールバック関数で実装している内容を順に見ていきますと、
- surfaceCreated:SurfaceViewが生成されたらカメラをオープンする
- surfaceDestroyed:SurfaceViewが破棄されたらカメラを解放する
- surfaceChanged:SurfaceViewの大きさやフォーマットが変わったらプレビューの大きさを設定する
のようになります。
コールバック関数を実装できたら、あとはholder.addCallback()でコールバック関数を登録します。
以上で、とりあえずカメラのプレビューができるようになります。
次回はシャッターを押したらプレビューの内容を撮影するところまで行きたいと思います。