SurfaceViewを用意する

1.開発目標

このページの目標は、中身の無いSurfaceViewを作ることです。具体的には、SurfaceViewを継承したクラスを作り、これにCallbackインターフェイスを実装し、それをActivityにセットします。これが、SurfaceViewを使った開発の基礎になります。

2.Androidプロジェクトを作る

Androidプロジェクトを作ります。「ファイル」→「新規」→「プロジェクト」→「Android Project」。この開発では以下のようなプロジェクトにしておきます。

プロジェクト名UsingSurfaceView
ターゲットAndroid 1.6
アプリケーション名SurfaceViewの使い方
パッケージ名sample.android.usingsurfaceview
ActivitySampleActivity
SDKバージョン4

3.SurfaceViewを継承したクラスを作る

SurfaceViewを継承したクラスを作ります。ただ、これだけでは何も起きません。

フォルダ構成

[ UsingSurfaceView ]
    [ src ]
        [ sample.android.usingsurfaceview ]
            SampleActivity.java
            SampleSurfaceView.java
    [ gen ]
    [ Android 1.6 ]
    [ assets ]
    [ res ]
    AndroidManifest.xml
    default.properties
    proguard.cfg

SampleSurfaceView.java

package sample.android.usingsurfaceview;

import android.content.Context;
import android.view.SurfaceView;

public class SampleSurfaceView extends SurfaceView {

    public SampleSurfaceView(Context context) {
        super(context);
    }

}

4.Callbackインターフェイスを実装する

SurfaceHolderクラスのCallbackインターフェイスを実装します。そして、そのインターフェイスから受け継いだCallbackメソッドをこのクラスに登録します。これで重要なメソッドが使えるようになります。

SampleSurfaceView.java

package sample.android.usingsurfaceview;

import android.content.Context;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;

public class SampleSurfaceView extends SurfaceView implements Callback {
    private SurfaceHolder holder;

    public SampleSurfaceView(Context context) {
        super(context);
        holder = getHolder();
        //callbackメソッド(下の3つ)を登録
        holder.addCallback(this);
    }

    //サーフェイス変化で実行される
    @Override
    public void surfaceChanged(SurfaceHolder holder, int f, int w, int h) {
        super(context);
    }

    //サーフェイス生成で実行される
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    }

    //サーフェイス破棄で実行される
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }

}

5.ActivityにSurfaceViewをセットする

ActivityにSurfaceViewをセットします。SurfaceViewがセットされると、SurfaceViewの中のsurfaceCreatedメソッドが実行されます。さらに、surfaceChangedメソッドも実行されます。

SampleActivity.java

package sample.android.usingview;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;

public class SampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //SurfaceViewをセットする
        LinearLayout l = new LinearLayout(this);
        setContentView(l);
        l.addView(new SampleSurfaceView(this));
    }
}

6.開発結果

まだ中身はありませんが、これでSurfaceViewを作ることができました。実行してみます。

エラーにはなりませんが、何も起こりません。画像を表示したい所ですが、最初にやって置いた方が良いことがあります。次回は、メインループを実装します。