以前購入したAndroidプログラミングの本を参考に
SurfaceViewをいじってみたんだけど、Android4.xでは
動いたけど、5~6辺りで全くうんともすんとも言わなかったので
色々調べてみたんだけど、なかなかうまく動くモノが無かった。
四苦八苦しながらやっと、サンプルにできるくらいは
出来たので記録。
(一部のAndroid6.0エミュレータではスワイプしたら落ちたけど
原因不明。試しに他の6.0で試してみたら落ちなかったので
Android6.0で落ちると言うことではなさそう。)

SurfaceViewとThread(ここではDrawThread)を
分けているサンプルなどもあるけど
分けて記述することも可能かと思いますが、
ここではSurfaceViewのファイルと一つにまとめて記述しています。

(AndroidStudio 3.1.4で作成)
必要javaファイルは2つ
*MainActivity.java
*SurfaceViewSample.java

■[MainActivity.java](任意の名称に変更して下さい)
(import部分は省略しています)

※コールバックのonGameOver関数はSurfaceViewでゲームオーバーなどの
処理で使用できるように作っているだけで、サンプルでは使用していません。

【setContentView(surfaceViewSample)】の部分を
setContentView(new SurfaceViewSample(getApplicationContext()));
書き方も出来ますが、
Activity側で処理を止めるために(onPauseで止めています)
直接記述はしていません。
また、getApplicationContext()を引数で渡していますが、
thisなどのサンプルも見かけます。
どちらでもいいですが、一応渡すのはContextなので、
getApplicationContextの方がよろすぃみたいな説明を
されている方もいらっしゃいました。

■[SurfaceViewSample.java](任意の名称に変更して下さい)
※gameOver()関数は未使用ですが、ゲームオーバー等の処理で
MainActivityへのコールバックを作成しています。

Android PGMカテゴリの最新記事