주간 진행 보고서 (3월 4주차)

2019.03.26


환경설정 다이얼로그 부분을 마무리지었다.

데이터 자동 저장 기능 On/Off 버튼과 데이터 저장 주기에 대한 기능을 활성화시키고 환경설정 다이얼로그 내 일부 UI를 수정하였다.

이것 이외에는 부가적인 일들로 시간을 보냈고 이번 주 기간 동안에는 조이스틱을 이용한 화면을 구성하는 데 몰두할 계획이다.

데이터 저장 주기 선택 방식을 TextView 버튼 방식으로 설정해두었고 단위를 선택할 때마다 그 숫자 혹은 글자의 색깔을 변경하여 선택하였다는 표시를 확실히 확인할 수 있게 하였다.

SetTextColor(Color.parseColor) 메소드로 색상 변경을 시도하는 도중 문제 하나가 발생했는데 font-family에 해당하는 설정 메소드 Java 클래스 파일에 따로 존재하지 않아서 폰트 스타일에 대한 xml을 새로 만들고 setTextAppearance 메소드를 이용하여 필요한 경우마다 폰트 스타일을 변경하도록 하였다.

또, 다이얼로그 생성 시 EditText에 자동으로 포커싱 되는 문제가 있었는데 그 부분은 처음에 최상위 레이아웃에 포커스를 줌으로서 문제를 해결하기도 했지만 Visibility를 이용하여 사라지고 나타나게 하는 것이 보기에 더 좋은 것 같아 그렇게 코드를 작성했다.

대부분의 화면들이 완성되면 안드로이드 SQLiteDatabase를 이용하여 설정 값들을 저장할 계획이다.



2019.03.27


조이스틱부 화면을 구성했다.

기존의 버튼부 화면과 유사하게 하고 카메라를 우측으로 밀어 배치했고 시간 및 날짜 구성을 두 줄에서 한 줄로 바꾸어 표현했다.

또한, 통신 상태 및 배터리 아이콘을 시간 정보 바로 하단에 배치하고 그 바로 아래 조이스틱이 들어갈 공간만을 남겨두었다.

현재 조이스틱을 구현하는데 있어 두 가지 방법이 존재하는 것 같은데 기존에 하려고 계획했던 SurfaceView 위에 그림을 그릴지, 아니면 AndEngine이라는 안드로이드 2D 표현 오픈소스 라이브러리를 적용하여 만들지 조금 더 고민을 해봐야 할 것 같다.

레이아웃을 구성하면서 크게 어려운 점은 없었지만 조이스틱을 연구하는 과정이 생각보다 복잡할 것 같다는 생각이 든다.

오늘 자료들을 찾아보면서 조이스틱 구현 방식에 대해 공부를 해보았는데 아무래도 조이스틱 버튼을 눌러서 움직이는 것이 중요하기 때문에 그림을 포개 그린 후에 위치를 어떻게 이동시킬까를 고민하는 부분이 가장 어려웠다.

정확히는 수학적으로 계산을 해서 정해진 좌표와 각도를 계산하고 계산된 좌표의 변화에 따라 지속적으로 그림을 그려주는 것 같은데 어느 정도 이해는 되지만 코드로 구현하는 방법이 어려워서 오픈소스를 적용해서 조금 더 간단한 방식을 쓰는 것이 좋을 지, 아니면 개인적으로 처음부터 모든 것들을 다 만들어보는 것이 좋을 지 정해진 계획 기간 내에 결정할 수 있도록 해야겠다.



2019.03.28


조이스틱 화면 레이아웃을 일부 수정했다.

기존 통신 연결 상태 표시 및 배터리 표시 아이콘 크기를 수정하였고 조이스틱 버튼 아래의 배경과 360도 회전 버튼 아이콘을 새로 배치하였다.

기존 계획대로라면 이번 주 내내 조이스틱만을 연구하는 것으로 되어있었지만 4월 중간 발표 전까지 다양한 것들을 마무리 하기 위해서 버튼 화면에 있는 기능도 동시에 구현하고자 한다.

그래서 오늘은 버튼 화면 화살표 UI를 그라데이션을 추가해서 리뉴얼하였고 각 버튼을 눌렀을 때 현재 향하는 방향이 어떤 방향인지 표시하도록 하였다.

기존에 모든 안드로이드 스마트폰을 대상으로 작성하려고 했는데 오늘 버튼 화면을 구성하면서 onTouchEvent를 적용하는데 버튼에 대해 멀티 터치 방식을 어떻게 모든 기종에 적용시킬까 하는 어려움이 생겨 현재 쓰고 있는 기종(갤럭시노트8 8.0 오레오)만을 대상으로 코드를 작성할 계획이다.

멀티 터치를 구현하면서 처음으로 MotionEvent 클래스를 이용해보았는데 ACTION_MASK를 통해 터치 이벤트 액션을 구분지어줘야 멀티 터치 기능이 제대로 작동하는 것을 확인하였다.

ACTION_POINTER 기능을 잘 활용하면 다양한 부분에서 적용할 수 있을 것 같다.

오늘은 좌표에 따른 원터치 기능만 확인하였고 내일은 멀티 터치 기능까지 확인할 계획이다.



2019.03.29


버튼 화면의 회전, 역회전 버튼의 기능을 먼저 구현하였다.

어제와 동일하게 원터치 기능을 우선적으로 테스트하여 정상 작동을 확인하였고, 완료된 이후에 멀티 터치 기능을 구현하였다.

작동을 위한 스마트폰 기종을 갤럭시노트8 오레오 버전으로 한정했기 때문에 멀티 터치 구현 방식에 좌표를 이용하여 코드를 짜는 부분에서 조금 더 쉽게 제어할 수 있도록 했다.

원터치 기능을 구현하는 부분에 있어서는 어려움이 없었는데 멀티 터치 기능을 구현하는 부분에 있어서 문제점을 발견하였다.

2개를 초과하는 멀티 터치 상황의 경우 무조건 2개로 설정하도록 제한했지만 눌리는 순서도 중요하다보니 몇 번째의 터치가 화면에서 발생하고 떨어지는지 확인하는 부분이 조금 복잡했다.

이에 파생되는 문제로, 멀티 터치 시에 2개 이상의 멀티 터치를 하다가 하나를 떼는 경우 터치되는 부분의 움직임이 조금이라도 없다면 (터치하는 좌표를 움직이지 않는다면) 어떤 손이 떼어졌는지 확인이 불가능했다.

예시로, 앞 방향 대각선을 누르고 있다가 왼쪽 버튼에서 손을 떼었을 경우 앞으로 가야하는데 앞으로 가는 방향의 버튼 좌표를 미세하게라도 변화를 주지 않으면 계속해서 앞 방향 대각선으로 가는 문제가 발생했다.

이는 기존에 작성했던 코드 중에 해결할 수 있는 방법이 있었지만 실제 실험 결과 제대로 작동하지 않아 여전히 어려움을 겪고 있다.

그래서 일단 발표 전까지는 기본적인 부분들만 가동하고 차후 제품이 완성된 이후에 제대로 테스트를 해봐야 할 것 같고 이후에 시간이 남으면 그 때 다시 한 번 연구해봐야겠다.

Author

Alec J

Posted on

2019-05-04

Updated on

2021-02-09

Licensed under