Android Surface

Chance·2023년 1월 3일
0

SurfaceView란?

  • 일반 뷰는 Main Thread의 Canvas를 통해 그리기를 수행한다.
  • Main Thread에서 그려야 하므로 속도가 빠르지 못하다 (다른 일도 처리해야 하므로,,)
  • 안드로이드 기본 정책 상 Main Thread가 아닌 다르 스레드에 뷰나 캔버스를 직접 작성하지 못한다.

Surface 방식

  • SurfaceView에서 직접 내용을 뿌리지 않고 SurfaceHolder를 통해 데이터를 받아서 처리한다.

Surface의 구성요소

  • SurfaceView는 canvas가 아닌 Surface를 갖고 있습니다. (가상 메모리 화면)
    -> 메인 스레드가 표면(Surfcae)의 변화를 감지해서 스레드에게 그리기 허용 여부를 알려 줘야 하며, 이는 SurfaceHolder.Callback 으로 합니다.
  • void surfaceCreated (SurfaceHolder holder)
    : 표면이 처음 생성된 직후에 호출됩니다. 이때부터 표면에 그리기가 허용됩니다.
    표면에는 한 스레드만 그리기를 수행할 수 있습니다.
  • void surfaceDestroyed (SurfaceHolder holder)
    : 표면이 파괴되기 직전에 호출됩니다. 이게 리턴된 후에는 더 이상 그리면 안됩니다.
  • void surfaceChanged (SurfaceHolder holder, int format, int width, int height)
    : 표면의 색상이나 포맷이 변경되었을 때 호출. 최소한 한번 호출됩니다.
    이 메서드로 전달된 인수를 통해 표면의 크기 초기화하곤 하죠.
  • class MyView extends SurfaceView implements SurfaceHolder.Callback
    : 표면 관리주체는 SurfaceHolder. 이 객체를 통해 표면 크기, 색상 등을 관리합니다.
    즉 View 는 보여주기만 할 뿐, Control 은 Holder 로 한다는 이야기지요.
  • SurfaceHolder SurfaceView.getHolder()
    void SurfaceHolder.addCallback (SurfaceHolder.Callback callback)

    : 시스템이 표면의 변화가 발생할 때마다 콜백 메서드 호출
  • Canvas SurfaceHolder.lockCanvas ()
    : 표면을 잠그로 표면에 대한 캔버스 제공합니다. lock 된 상태에서 이 canvas에 그림을 그리고, unlock 이 되면 화면출력이 됩니다.
  • void SurfaceHolder.unlockCanvasAndPost (Canvas canvas)
    : 표면 비트맵에 그려진 그림을 화면으로 내보내 출력을 한다.

0개의 댓글