Androidアプリ作成講座 6-SurfaceViewがイベントを受け取れるようにする

2018年8月9日

今のままではSurfaceViewにイベントが飛んできません。そこで、起動や変更、終了などのイベントが受け取れるように、処理を記述します。

1.SurfaceViewソース

package kunimiyasoft.circletest;

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

import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {

    private SurfaceHolder holder;

    public MySurfaceView(Context context) {
        super(context);

        holder = getHolder();
        holder.addCallback(this);
    }

    // 変化があった時
    @Override
    public void surfaceChanged(SurfaceHolder holder, int f, int w, int h) {
    }

    // 作成された時
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    }

    // 破棄される時
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }
}

内容が少し難しくなりました。ここでは、具体的な説明はあまり行わず、こうすればイベントの処理ができますという形で説明します。

2.implementsの記述

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback

クラス宣言の行で、implementsの記述をします。イベントが起きた時に呼ばれるコールバック関数を使うために必要です。

3.SurfaceHolder変数

import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;

holder = getHolder();
holder.addCallback(this);

SurfaceViewへのアクセスのために、SurfaceHolderが用意されています。インスタンスはgetHolderで取得ができます。そして、addCallback関数でコールバック関数を登録しています。ライブラリも必要になるので、宣言します。

4.コールバック関数

surfaceCreatedとsurfaceChanged、surfaceDestroyedを登録しています。それぞれ、作成時、ビューに変化があった時、破棄された時のイベントで呼ばれます。ここに処理を書くことで、ビューの動作を制御することができます。

surfaceChangedでは画面のサイズが分かるので、後に行う描画時に利用します。

次の投稿で、描画をしてみます。

(LIST)Androidアプリ作成講座

Androidアプリ作成講座 プロローグ
Androidアプリ作成講座 1-プロジェクトを作る
Androidアプリ作成講座 2-プロジェクトを確認する
Androidアプリ作成講座 3-エミュレーター環境を作る
Androidアプリ作成講座 4-SurfaceViewクラスを作成する
Androidアプリ作成講座 5-SurfaceViewをActivityにセットする
Androidアプリ作成講座 6-SurfaceViewがイベントを受け取れるようにする
Androidアプリ作成講座 7-キャンバス上で描画する
Androidアプリ作成講座 8-円を描画する
Androidアプリ作成講座 9-デバッガを使ってみよう
Androidアプリ作成講座 10-Animationクラスを使う
Androidアプリ作成講座 11-円移動のソース