libro
www.tuyano.com
Google androidプログラミング入門

ハードウェア・アクセス (5/7)

作成:2010-06-01 19:31
更新:2011-01-27 21:02

■カメラ利用の流れを整理する

では、作成されているソースコードをざっとチェックしていきましょう。

○onCreateメソッド
requestWindowFeature(
        Window.FEATURE_NO_TITLE);
これは、ウインドウのタイトルを非表示にするためのものです。「requestWindowFeature」はウインドウの設定を行うもので、引数にタイトル非表示の設定を示すWindow.FEATURE_NO_TITLEを渡します。
mPreview = new Preview(this);
setContentView(mPreview);
カメラの表示を行うためのビュー「Preview」を作成し、setContentViewで画面に設定しています。このPreviewは、Androidに用意されているものではなくて、この後で作成するクラスです。

■Previewクラス

class Preview extends SurfaceView
        implements SurfaceHolder.Callback {
カメラの映像を表示するビュー「Preview」クラスの定義です。これは、SurfaceViewクラスを継承して作成します。そして、SurfaceHolder.Callbackというインターフェイスをimplementsします。SurfaceViewはイメージなどの表示を行うための基底クラスとして用いるものです。またSurfaceHolder.Callbackは、表示がされたり更新されたりした時のコールバックを用意するためのものです。

○Preview(Context context)
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
コンストラクタでは、SurfaceViewの表示をホールドする「SurfaceHolder」というクラスのインスタンスを取得(getHolder)し、これにコールバックを組み込み(addCallback)ます。これで、このSurfaceHolderで表示の更新などがされると、コールバック設定されたインスタンスのメソッドが呼び出されるようになります。またsetTypeを使い、SurfaceHolderのタイプをSURFACE_TYPE_PUSH_BUFFERSというものに設定します。これは、PUSHバッファというものを使うためのものです。

○surfaceCreated(SurfaceHolder holder)
mCamera = Camera.open();
Camera」は、文字通りカメラのクラスです。この「open」を呼び出すことで、カメラが起動?します。
try {
    mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
    mCamera.release();
    mCamera = null;
}
setPreviewDisplay」で、カメラの映像を、あらかじめ用意しておいたSurfaceHolderに設定します。設定に失敗した場合は、releaseでカメラを開放します。

○surfaceDestroyed(SurfaceHolder holder)
終了時の処理です。カメラのプレビュー表示を停止し、カメラを開放します。

○surfaceChanged(SurfaceHolder holder,int format,int w,int h)
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
mCamera.setParameters(parameters);
mCamera.startPreview();
サーフェスが変更された際の処理で、ここでプレビュー表示の設定などを行っています。getParametersCameraからパラメータを取得し、setPreviewSizeでプレビューサイズを設定します。そして、setParametersで再びCameraにパラメータを設定し、startPreviewでプレビューを開始します。


――ざっと流して説明しましたが、まぁ要するに「これをそのまま使えばカメラの映像を表示するのができるんだ」という程度にわかれば十分でしょう。あれこれいじっているうちに、それぞれのメソッドの働きがなんとなくわかってくるんじゃないでしょうか。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

※関連コンテンツ

「Google androidプログラミング入門」に戻る