Androidアプリを作ってみる #18 -Surfaceview その1-

いよいよSurfaceview!?

Surfaceviewから脱線していた話

Surfaceviewってのを使うって言ってからだいぶ脱線したところで止まってました。そう、ゲームを作るなら「Surfaceview」がいいんじゃないのかって話です。Androidでは画像を高速で書き換えたりする場合はこれを使うらしいです(毎回毎回更新が必要な描画に最適)。他にも「Open GL」とかもあったりするらしいですがそれはそれでまたの機会に勉強してみましょう。ってことで今回こそ「Surfaceview」です。

メリ
波乗り?
本Blogの内容を試して、トラブルや故障の原因になったとしても責任は負えません。そんな危ないことはしていませんが、自己責任でお願いしますね。

脱線気味の過去記事

Androidアプリを作ってみる #17 -Androidのライフサイクル-

2016.12.11



まずSurfaceviewを継承したクラスを用意する

前やったクラスと継承を使う

まずは、Surfaceviewを使うのでこのSurfaceviewクラスを継承したクラスを新たに用意しましょう。クラス名は「GameSurfaceview」です。ただ追加するといってもAndroidStudioを使う場合は簡単に追加できます。

継承とかクラスとか

Androidアプリを作ってみる #16 -クラスの継承-

2016.12.03

Androidアプリを作ってみる #15 -クラスとは-

2016.11.23

追加したいパッケージ(フォルダ階層みたいなもの)にマウスを合わせて右クリック→「New」→「Java Class」を選択するとJavaクラス作成ダイアログが出てきます。

Java Class generate

簡単に作れるクラス

この「Create New Class」でクラス名の「Name」と継承するクラス名の「Superclass」を指定します(継承元クラスをSuper Classと言います)。

ちなみに「Superclass」欄(それ以外もですが)で「Surfa…」とうっていくと以下のように該当するものの候補が出てくるのでそれを選んでしまえばOKです。それ以外はそのままで「OK」を押しましょう。そうすると…。

Java class generate superclass

クラス名と継承するクラスを指定できる

新しいクラス完成!?

でもエラーが…

新しいSurfaceviewを継承したクラスが作成されました。あれ?でも何やら赤の波線が出てましたね。こういったIDE(統合開発環境)系では赤と言ったら大体がエラーです。何のエラーなんでしょうか。

エラーが出た

赤い線は危険のかほり

赤線にマウスを合わせてみると「There is no default constructor available in ‘android.view.Surfaceview」と出てきました。そのままですね。

Google先生もそのように仰ってます。

‘android.view.Surfaceview’にはデフォルトのコンストラクタはありません

コンストラクタがないって言ってますね。じゃ追加しましょう。

コンストラクタも簡単に追加できる

実はコンストラクタも簡単に追加が出来ます。メニューの「Code」→「Generate…」を押して、以下から「Constructor」を選択します。

constructor generate

コンストラクタも簡単に作成できる

androidstudio 機能

これをポチッとな

そうすると簡単作成機能が出てきます。

コンストラクタ作成

引数の違いで数種類あるけどきにするな

にゃんこ
そんな名前じゃないだろ。

とりあえずこの一番上を選んでおけば大丈夫でしょう。

メリ
テキトーね。

そうするとほら!!自動でコンストラクタが追加されました。便利ですねー。



Surfaceviewが自身の状態変化を監視できるようにする

Surfaceviewを使えるようにするために必要

Surfaceviewを使えるようにするために「SurfaceHolder」からのコールバックを受け取れるようにしなければなりません。

にゃんこ
コールバック!?
コールバックというのは、例えば「Surfaceviewが作成された時に実行されるメソッド」とでもいいましょうか。ある変化(事象)があった時に呼ばれる処理のことをコールバックと言います。

これを実現するためにJavaの「implements」という「インターフェース」というものを使います。でもこれは深く考えなくても大丈夫です。必ず継承したクラスで実装しなければならないメソッドが存在するスーパークラスとでも覚えておけば大丈夫です。

ってことで先ほどの「GameSurfaceview」に追加してみます。「…extends Surfaceview」の後ろに「implements SurfaceHolder.Callback」を記述してください。さっきと同じように途中まで書けば候補が出てくるのでそれを選んでしまった方が楽ですね。そしてまたもや赤の波平が出てきました。今度は何でしょう!?

実装しなければいけないメソッドがある

これは「インターフェース」を使っているから出るエラーです。「SurfaceHolder.Callback」を「implements」したら必ず実装しなければならないメソッドがあります。それは何か!?

実はこれも簡単に知ることが出来ます。先ほどの「コンストラクタ」の時と同様、メニューの「Code」→「Implements Methods…」を選択すると以下のように「implements」しないといけないメソッド一覧が表示されます。これを全部選択して「OK」すれば自動で挿入してくれます。うん、便利便利。

implementsも簡単

implementsも簡単

実装すべき一覧

実装すべき一覧

出来ました。めでたくエラーも消えてますね。ってことで長くなってきたのでここいらで次回に続きます。

にゃんこ
ちゃんと復習しろよメリ。
メリ
ずっとついていけてませんが…。

SurfaceHolder.Callbaclの仕様は以下
Android Developers 

次の記事

Androidアプリを作ってみる #19 -Surfaceview その2-

2017.01.22

前回の記事

Androidアプリを作ってみる #17 -Androidのライフサイクル-

2016.12.11