[TIL]Android Custom View

mandoofu·2024년 10월 28일

안드로이드

목록 보기
19/20

Custom View

  • Drawing(Canvas와 Paint) 기능을 이용하여 새로운 UI 정의 함

  • View 클래스의 onDraw(Canvas canvas) 메서드는 반드시 재정의

  • android.graphics.Paint

    • 사용자 정의 위젯을 만드는 목적은 개발자가 필요한 속성(styleable) 또는 함수를 추가하
      여 기능을 확장
  • android.graphics.Canvas

    • 안드로이드 화면의 직사각형 영역을 그리는 수단들을 제공.
    • 이미지, 텍스트, 도형 등등( drawXXX(,,,,) 메서드를 제공)
  • android.graphics.Paint

    • 스타일, 복합색, 렌더링 정보를 캡슐화 함.
    • Canvas 위에 그릴 물감에 해당 한다고 보면 합당.
    • Paint에 의해 그래픽, 도형, 글꼴(Typeface) 등에 적용 될 수 있음

UI Drawing Order

  • View Constructor

  • Attachment/Detachment

    • 해당 Window(Activity)에 탈/부착 되었을 때
    • Callback Method
      • onAttachedToWindow()
        • Window 부착 시 호출, 뷰 적재, 리스너 부착 준비상태(onCreate() 호출 시 자동 호출)
      • onDetachedFromWindow()
        • Window 탈착 시 호출, 뷰가 사용하던 리소스 해제
        • Activity onDestroy() 호출 시 자동 호출
  • onMeasure()

    • View Dimension(가로/세로 사이즈)를 계산(wrap_content 시 부모 뷰가 자동 결정)
    • View Container(ViewGroup)에 붙어있는 자식 뷰들의 관계성을 파악하고 자신의 Dimension을 계산
    • MeasureSpec.UNSPECIFIED
      • 고정된 값이 아니며 개발자가 크기를 동적으로 설정할 수 있음
  • onLayout(int left, int top, int right, int bottom)

    • onMeasure() -> onLayout(, , ,)을 통해 계산된 자식 뷰를 단말기 좌표에 배치
  • onDraw(Canvas)

    • onLayout(,,) -> onDraw는 Canvas 인스턴스 생성
    • canvas 에 Paint 객체를 이용하여 렌더링을 한다
    • canvas 객체는 DisplayList에 넣어 렌더링 할 데이터를 넘겨준다
    • onDraw 반복적 호출(한 Frame 식 렌더링)을 이용하여 그린다
      • CPU(GPU)연산이 이루어 지는 곳이므로 객체 생성을 onDraw에서는 절제한다
    • requestLayout()
      • 뷰의 영역이 변경되면 반드시 호출
      • 호출 시 onMeasure -> onLayout -> onDraw 가 진행
  • Layout 의 Root부터 시작해서 Top Down 방식으로 드로잉(부모-> 자식(형제))

  • Constructor

    • View(Context context, AttributeSet attrs) : layout_name.xml 생성되며 AttributeSet 은 해당 xml의 속성들

0개의 댓글