티스토리 뷰

개발/안드로이드

[Diary] 001_View를 알아보자

leanQ_mountain 2016. 10. 19. 19:18

우리가 쓰는 안드로이드를 작동시키는 UI는 여러가지 컴포넌트(OBJECT)들로 이루어져 있다.


XML 파일을 생성하면 맨처음에 나타나는 TextView부터 Button, CheckBox, Toggle, Switch 등등


여러가지 모양의 유저인터페이스가 있는데, 이것을 View라고 부른다.



Activity 속에서 View는 ViewGroup(Layout)안에 배치할 수 있지만, View 독자적으로도 배치가 가능하다.


오늘 얘기 하고 싶은 것은 이 View들을 어떻게 사용할 수 있을까?


사람들이 SwipeLayout이니 AutomaticLayout 이니 요상한 이름의 레이아웃을 만들어서 라이브러리로 제공하는 것을 보았지만,


이는 구글에서 기본적으로 제공하는 것이 아니라, 어떤? 원리를 이용하여 사람들이 만들어 낸 것이다.




오픈소스를 이용하여 자유롭게 사용할 수 도 있지만, 이런 것을 어떻게 만드는지 


원리를 알아두면 더 능력있는 개발자가 되지 않을까하는 생각이 든다. 


어렵다고 주저하지 말고 도전해본다.




현재 미국에서 캡스톤 디자인으로 하는 프로젝트는 소방로봇을 제어하는 프로그램이다.


소방로봇이지만, 조작은 갤럭시탭(7") 로 할수있도록 작업중이다.


내가 맡은 분야는 안드로이드 클라이언트 개발이고, 지금 최대 난제는 나만의 View를 만들기 이다.



소방로봇은 캐터필러로 이동한다. 캐터필러의 움직임을 제어하기 위해서는 리모컨의 조이스틱과 같은 UI가 필요한데


이것을 직접 만들어보았다.



1.view에 대해서


- view는 https://developer.android.com/guide/topics/ui/overview.html  이걸보고 이해하자 솔직히 이런걸 백날 봐도


  이해못한다는 것을 잘 알고 있기에, 딱히 읽을 것을 추천하진 않는다. 스스로 여러가지 소스를 접하며 자기만의 뷰를


  만들어 보기를  추천하고 싶다.


2. view의 메소드 연구


 - view속에 들어있는 메소드는 여러가지가 있다.

-onMeasure() : 뷰의 크기를 알아서 계산해줌(좌상단 x,y좌표 0,0 기준)

-onDraw() : view안에서 그림을 그리도록 해줌

-Contructor() : 생성자에 초기화 함수를 넣어서 생성과 동시에 원하는 모양으로 만들도록하자

-onTouchEvent() : 뷰를 만지면 발생하는 메소드(터치하고 스크롤을 할때 바뀌는 것을 만들 수 있다. ScrollView도 이런 원리로 만든다)


 - view의 메소드가 굉장히 잘 되어 있어서 잘 보면 잘 만들었다. 내 메소드는 git에서 공개할 예정이다.

-나는 onDraw에서 바깥 배경과 버튼의 색상을 지정한 위아래로 움직이는 조이스틱을 만들었고, 이를 2개를 만들어서 왼쪽 오른쪽 바퀴를 각각 제어하는 조이스틱을 만들었다.

-메소드를 사용을 예상하는 순서는 onMeasure에서 뷰의 크기 계산 및 중심점 좌표(centerPoint)를 계산, onTouchEvent에서 내가 누르는 점의 좌표를 구해서 내가 누른 점의 좌표와 중심점 좌표사이의 차이를 구하여 저장하고, onDraw에서 내가 누르는 점의 좌표에 버튼이 맞춰서 움직이게끔 하였다. 물론 손을 떼면 자동으로 중심으로 돌아오도록한다.


3. MVP패턴

- view안에서 움직이면서 메소드가 발생하도록 하고 싶은데, view안의 메소드만으로는 context관리가 어려워 복잡한 메소드를 만들기 어렵다. 그래서 interface로 Listener라는 것을 만들고, 이 Listener는 Activity에서 완성해서 뷰에 셋팅해주는 순서로 완성한다. 이게 바로 MVP패턴이다. 조금 어려운데, 하다보면 익숙해지므로 여러번 반복해서 해보는 것을 추천하고 싶다.



P.S 그림자료와 함꼐 좀 더 잘 정리하고 싶은데, 시간이 부족해서 힘들다. 앞으로는 좀 더 알기 쉬운 설명으로 포스팅해야겠다.