안드로이드에서 룰렛을 구현하고 싶었다.

이미지를 활용하여 이미지만 회전시키는 형식의 룰렛은 많았지만

내가 직접 값을 입력할 수 있고 갯수를 설정하여 만드는 것에 대한 예시는 없었다.

그래서 직접 구현해 보았다.

 

1. 기본 UI 구현

간단하게 버튼 두 개와 가운데 룰렛을 그려줄 레이아웃 그리고 회전 버튼을 추가한다.

 

2. drawArc를 사용하여 호 그리기

canvas.drawArc() 의 매개변수를 설명하자면

 - temp : Arc를 그릴 시작 각도

 - sweepAngle : Arc의 각도

정도 이해하면 되겠다.

 

호를 그린 다음에 텍스트를 가운데 입력해주고 싶었는데 이 부분이 굉장히 어려웠다.

 

삼각함수를 활용하여 호의 중점을 알아내고

호의 중점과 원의 중점 가운데에 텍스트를 입력할 수 있도록 했다.

 

setRandom을 통해 호에 들어갈 숫자들을 랜덤으로 설정할 수도 있다.

getResult는 회전한 각을 계산하여서 결과값을 뽑아내는데

조금 더 간단하게 구현하고 싶었지만 방법을 알아내지 못하여 코드가 지저분하다. ㅠ.ㅠ

 

위의 버튼을 클릭하면 1, 2와 같이 룰렛이 그려지고 spin을 클릭하면 결과값을 받아올 수 있다.

 

3. 소스 코드

https://github.com/thoon-kim/ThRoulette/

개발을 하다보면 다양한 구조의 View를 만들때가 있다.

ScrollView 안에 ListView를 넣고 싶었는데

두 개가 같이 스크롤 되어 가끔 스크롤이 제대로 동작하지 않는 문제가 발생했다.

그래서 ListView의 크기를 고정시켜 스크롤이 작동하지 않도록 하는 방법을 생각해봤다.

 

1. 기본 UI 구현

먼저 스크롤 뷰의 ChildLayout에 LinearLayout을 넣어주고 텍스트뷰와 리스트뷰를 위치시킨다.

ScrollView의 fillViewport="true"로 설정하여 스크롤뷰가 화면 전체를 차지하도록 한다.

 

 

2. Java에서 ListView 크기 설정

리스트뷰 아이템의 크기를 측정하고 높이를 모두 합하여 ListView의 Height를 설정한다.

 

 

다음과 같이 동작하는 것을 확인할 수 있다.

 

 

3. 소스 코드

https://github.com/thoon-kim/ListScroll

+ Recent posts