hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (150)
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (5)
      • 공부 (1)
      • Spring (4)
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s
IT 동아리/UMC 3기 (Android)

[UMC/Android] 7주차 - Thread 이용한 타이머 만들기

[UMC/Android] 7주차 - Thread 이용한 타이머 만들기
IT 동아리/UMC 3기 (Android)

[UMC/Android] 7주차 - Thread 이용한 타이머 만들기

2022. 11. 16. 18:40
728x90

7주차 - Thread 이용한 타이머 만들기

⏱️ 구현 영상

코드

UMC_Android/week7 at master · ss99x2002/UMC_Android

⏱️ 구현 설명

시간 선택 페이지

  • 59분 59초까지 타이머를 설정할 수 있는 페이지로 Number Picker를 사용해서 시간을 설정하도록 하였다.
  • 시간 선택 페이지와 타이머 페이지는 FrameLayout으로 겹쳐두고 visible 속성을 통해서 보이고, 안보이고를 지정하였다. 따라서 시작버튼을 누르면 타이버 레이아웃이 뜬다

타이머 페이지

  • 시간선택 페이지에서 선택한 시간의 타이머가 돌아가는 페이지로 시작 버튼을 누르면 타이머가 돌아간다.
  • 시작 버튼을 누르면 해당 버튼은 invisible되고 정지 버튼이 visible된다. 정지버튼을 누르면 타이머가 일시정지된다. (정지 버튼을 누르면 다시 시작버튼이 나오고 정지버튼은 사라진다)
  • 취소 버튼을 누르면 시간 선택페이지로 다시 되돌아간다. 타이머도 초기화된다.
  • 3초 남았을때부터 숫자 색이 빨간색으로 바뀐다.
  • 타이머가 끝나면 소리가 난다.

⏱️ 배운점

1️⃣NumberPicker

  • 시간 설정을 하기 위해서 NumberPicker를 처음 사용해봤다.
  • maxValue속성을 통해서 최대 숫자를 지정할 수 있고, value를 통해서 현재 보이는 숫자를 지정할 수 있다.
  • setOnValueChangedListener 를 통해서 스크롤해 숫자를 바꿀 때 발생시킬 이벤트를 지정할 수 있다. 나는 변화할 때마다 선택된 값을 담는 변수를 새롭게 초기화해주는 이벤트를 넣었다. → 궁금한점: ViewModel을 사용하면 데이터 값이 변화하는걸 관찰하고 실시간으로 반영해주는 Live Data나 observe를 사용 할 수 있는데 이부분에 사용할 수 있는건지 궁금하다.

2️⃣Progress bar Custom

  • Progress bar의 종류에는 Indeterminate와 Determinate 가 있다.
  • 내가 구현하고자 하는 는 단순 로딩을 나타내는 것이 아닌 현재 진행률을 나타내는 프로그레스바로 determinate 프로그레스바에 해당한다.
  • determinate 프로그레스바에서 진행상황을 나타내고 싶을때 progressBar.progress 속성을 통해서 진행률을 나타낼 수 있고, progressBar.incrementProgressBy() 속성을 통해 한번 돌때 증가시킬 양과 max 속성으로 프로그레스바의 최대치를 지정할 수 있다.
    • 나는 타이머의 시간을 max로 1씩 증가시켜 타이머가 종료될 때 다 채워지도록 프로그레스 바를 만들었다.
  • determinate 프로그레스바를 커스텀 하기 위해서는 drawable 작성이 다음과 같아야한다.
    • 참고 영상 :
    https://www.youtube.com/watch?v=YsHHXg1vbcc
    • 예시)
<layer-list xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item> // 프로그레스 바가 채워지지 않은 부분
        <shape
            android:shape="ring"
            android:thicknessRatio="16"
            android:useLevel="false">
            <solid
                android:color="@color/white"/>
        </shape>
    </item> 
    
    <item> // 프로그레스 바가 채워질 부분
        <rotate
            android:fromDegrees="270"
            android:toDegrees="270">
        <shape
            android:shape="ring"
            android:thicknessRatio="16"
            android:useLevel="true"> // 이부분을 헷갈리지 않아야한다 . . 
            <solid
            	android:color="@color/black"/>
        </shape>
        </rotate>
    </item>
    
</layer-list>

⏱️ 트러블슈팅

Progressbar Custom

  • 문제: 타이머가 돌아가면 원형프로그레스바가 시간에 맞춰서 점차 채워지는 커스텀을 하려고 했으나 안돌아감.
  • 원인: 근본적 원인은 indeterminate progressbar 와 determinate progressbar의 차이를 이해하지 못해서 발생함. 또한 커스텀을 하기 위해 만든 drawable 파일에서 item 2개에 모두 useLevel을 false로둬서 progress는 진행되나 시각적으로 프로그레스바가 돌아가지 않았음.
  • 해결: 각 item의 useLevel을 false, true로 각각 두어 해결했다.
728x90
저작자표시 (새창열림)

'IT 동아리 > UMC 3기 (Android)' 카테고리의 다른 글

[UMC/Android] 9주차 - Open API 활용  (0) 2022.12.02
[UMC/Android] 8주차 - RoomDB 활용하기  (0) 2022.11.23
[UMC/Android] 6주차 - Bottom navigation, TabLayout, ViewPager2  (0) 2022.11.13
[UMC/Android] 5주차 - 메모 어플 만들기  (0) 2022.11.03
[UMC/Android] 3주차 - Activity/Fragment간 데이터 전달  (0) 2022.10.12
'IT 동아리/UMC 3기 (Android)' 카테고리의 다른 글
  • [UMC/Android] 9주차 - Open API 활용
  • [UMC/Android] 8주차 - RoomDB 활용하기
  • [UMC/Android] 6주차 - Bottom navigation, TabLayout, ViewPager2
  • [UMC/Android] 5주차 - 메모 어플 만들기
hyeon.s
hyeon.s
이유있는 코드를 짜자
개발로그이유있는 코드를 짜자

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.