[안드로이드-그 한계를 넘어서] 5장. 안드로이드 사용자 인터페이스 작업

사실… 좋은 UI를 디자인하는 법은 안드로이드 API를 사용해 인터페이스를 실제로 구현하는 법!

Activity및 Fragment에 대해 암기해야함.

초기화를 수행한 콜백 메서드와 대응되는 콜백 메서드에서 정리 작업(Service 중단 및 바인딩 해체, 컨넥션 종료 등) 수행해야 한다는 점.

화면을 재사용하고 싶다면 Fragment 사용하기.

커스텀 뷰 디자인

안드로이드가 제공하는 API에서 다양한 UI위젯을 결합해 복잡한 컴포넌트를 만들 수도 있지만 때로는 처음부터 커스텀 View를 설계해야 할 때도 있다. 이럴때를 대비해 View의 생명주기를 알아보자.

뷰 생명주기 이러한 뷰들은 Fragment나 Activity에 연결된게 아니라, 이 뷰를 보여주는 창의 상태 및 렌더링 루프와 연결되어 있다.

View가 View계층구조에 추가될 때 처음으로 일어나는 일은 View.onAttachedToWindow()호출로, 이를 통해 자신이 제대로 동작하는데 필요한 요소들을 로드할 수 있는 시점이다.

그래서 커스텀 View를 개발할 떄는 이 메서드를 오버라이드해 모든 리소스 로딩을 수행하고, View에 필요한 의존성을 초기화해야 한다.

View가 View계층구조에 추가되고 나면 뷰는 View.onMeasure(), View.onLayout(), View.onDraw()에 의해 애니메이션을 계산하는 루프를 통과하게 된다. 그리고 제거 될때는

view.onDetachedFromWindows();

예시 파일 피아노 키보드를 보여주는 커스터 View (코드파일 확인바람 5장)

멀티터치 두 손가락으로 조작하는 거말하는거임 5장 예제파일에서 PaintView를 확인해주세요.

PointerCoordinates 각 MotionEvent에는 각 포인터에 대한 모든 정보가 들어 있다. 안드로이드의 API에서는 리눅스 커널에서 정의하는 모든 입력 기기를 지원한다. 입력 파라미터는 기기마다 다를 수 있는 만큼 각 포인터는 여러 개의 축을 갖게끔 설계 됐다. 포인터에 가장 많이 사용하는 축은 x,y좌표 이지만, 압력, 거리, 방향에 대한 축 정보도 들어있다. 아울러 MotionEvent클래스는 포인터 좌표를 생성하는 입력값 이외의 입력값에도 사용될 수 있으므로 이 클래스에서는 게임 컨트롤러와 관련한 축 정보를, 조절판, 방향 키, 기울기, 스크롤 휠 같은 입력을 지원 한다.

화면제스처 안드로이드 API에서는 다양한 터치 제스처를 감지할 수 있는 두 개의 유틸리티 클래스 제공

바로, GestureDetector 클래스 와 ScaleGestureDetector클래스

GestureDetector클래스는 오래 누르기, 더블 탭, 플립 같은 간단한 한 손가락 터치 제스터를 지원

ScaleGestureDetector클래스는 구글 지도 및 이미지 줌 기능에 사용하는 핀치 줌을 감지할 수 있는 기능을 제공.

openGL ES