Androidアプリ作成講座 6-SurfaceViewがイベントを受け取れるようにする
今のままでは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-円移動のソース