〈kotlin〉Android studio使い方メモ13:Surface View
金宏和實さんの「作ればわかる!Androidプログラミング kotlin対応」を参考に
Android studioでkotlinを使ってAndroidアプリ作成。
画面を描写する時に使用するSurface Viewの使い方。
Surface Viewとは
アニメーションなど高度な画面の描写が必要な時に使用する。
サーフェイスという描写専用のレイヤーを持っており、
SurfaceHolderというインターフェイスを通じてサーフェイスにアクセスする。
実際にはSurfaceHolder.Callbackインターフェイスを実装する。
SurfaceHolder.Callbackインターフェイスを実装したクラスは
以下のコールバックメソッドを実装する必要がある。
コールバックメソッド | 呼び出されるタイミング |
---|---|
surfaceCreated() | Viewが生成されたとき(初期画面) |
surfaceChanged() | Viewが変更されたとき(画面更新) |
surfaceDestroyed() | Viewが破棄されたとき(後処理) |
実装
SurfaceHolder.Callback
class MainActivity : AppCompatActivity(), SurfaceHolder.Callback{ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) val holder = binding.surfaceView.holder holder.addCallback(this)
addCallback()メソッドでholderのコールバックに自分を設定することで
次に呼ばれる処理がsurfaceCreated()メソッドになる。
コールバックメソッド
override fun surfaceCreated(holder: SurfaceHolder) { val canvas = binding.surfaceView.holder.lockCanvas() //初期画面の描写を記述 binding.surfaceView.holder.unlockCanvasAndPost(canvas) } override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) { //更新時 } override fun surfaceDestroyed(holder: SurfaceHolder) { //破棄時 }
lockCanvas()メソッドはサーフェイスの表示をロックしてCanvasオブジェクトを返す。
変数canvasにオブジェクトを取得できたので、
CanvasクラスやPaintクラスのメソッドを使用して必要な描写を記述する。
記述できたらunlockCanvasAndPost()でアンロックしてサーフェイスを更新する。
lockCanvas()とlockCanvasAndPost()はペアで使用する。