SurfaceViewクラス

ViewクラスSurfaceViewクラス

SurfaceViewクラスとは?

 状態:-  閲覧数:1,401  投稿日:2018-06-22  更新日:2018-09-02  

高速にグラフィックスを描画するためのクラス


描画専門のビュー
・ピクセル単位の高速な描画
・バックグラウンドスレッドで描画処理できる

ゲームなど、速度を求められる場面でよく使用される
・内部にサーフェス(Surface)と呼ばれる高速描画専用のレイヤーを持っている

サーフェス(Surface)への描画
・SurfaceHolderインターフェイス(android.view.SurfaceHolder)を通じで行う
・これにより、サーフェスのサイズと形式の制御、サーフェス内のピクセル編集、サーフェス変更の監視を行うことが出来る

構成
java.lang.Object
  ↳ android.view.View
     ↳ android.view.SurfaceView

Surfaceとは


画面に描画される内容の生のバッファ(のハンドル)


SurfaceHolder インターフェイス

 閲覧数:289 投稿日:2018-08-27 更新日:2018-09-10 

SurfaceHolderインターフェイス


SurfaceHolder.Callbackインターフェイスを内包している
・Surfaceのピクセルを実際にいじったり、Surfaceの変化を監視する人のためのインターフェイス

SurfaceViewとの関係


SurfaceViewにはgetHolder()メソッドが用意されている
・getHolder()メソッドを使用することで、SurfaceHolder interface のインスタンスを取得できる

基本的な使い方

 閲覧数:341 投稿日:2018-09-02 更新日:2018-09-11 

SurfaceViewを継承したサブクラスを作成


サブクラス内で独自の描画処理を書いていく
※必ず「extends SurfaceView」する必要があるわけではない
public class サブクラス名 extends SurfaceView

SurfaceHolder.Callbackをimplementする


SurfaceViewは自身のSurfaceの状態変化についても監視する必要がある(途中でサイズが変わったら、それに応じて描画内容も調整したりなど)
・そのため、SurfaceHolderからのコールバックを受け取るためのSurfaceHolder.Callbackをimplementする
public class サブクラス名 extends SurfaceView implements SurfaceHolder.Callback
※必ず「extends SurfaceView」する必要があるわけではない
public class MainActivity extends AppCompatActivity implements SensorEventListener, SurfaceHolder.Callback


SurfaceViewのコンストラクタ


「SurfaceViewを継承したサブクラスのコンストラクタ」の中などで、ホルダーのコールバックに自身をセットしておけば、Surfaceの準備ができたタイミング(実際に描画できるようになったタイミング)等でコールバックが呼ばれるようになる
getHolder()
public サブクラス名(Context context) {
   super(context);
   getHolder().addCallback(this);
}
public class MainActivity extends AppCompatActivity
       implements SensorEventListener, SurfaceHolder.Callback {

   //中略

   @Override
   protected void onCreate(Bundle savedInstanceState) {

       //中略

       SurfaceView surfaceView =  (SurfaceView) findViewById(R.id.surfaceView);
       mHolder = surfaceView.getHolder();
       mHolder.addCallback(this);

使用例


画面上に表示したボールへ、センサーの値をリアルタイムに反映させる
JAVA 加速度センサーで玉ころがしアプリ
Kotlin 加速度センサーで玉ころがしアプリ

SurfaceView使用する場合は、必ずしも extends SurfaceView しなくてもよい?

SurfaceHolderからはCanvasを取得できるAndroidのSurfaceViewの基礎



SurfaceHolder  |  Android Developers


コメント投稿(ログインが必要)