[ 안드로이드 기초 ] 프로그레스바 (ProgressBar)
[안드로이드 기초] 프로그레스바(ProgressBar) |
● 프로그레스바는 '진행 바' 정도로 생각하면 될텐데요. 어플을 실행하거나 뭔가를 다운 받을때 진행 정도를 표현해주는 것들입니다. 많이들 봤겠지만 이것은 원형과 막대형이 있구요. 또 이것들을 Dialog안에 넣어서 새로운 창으로 띄워서 표현 할 수도있습니다.
예제를 만들어가면서 일반 원형, 막대형과 새로운 창을 띄워서 나타나게 하는 형태까지 구현해 보겠습니다.
● 다음과 같이 '원형'과 '막대형' 프로그레스바를 두개 설치하고, 토글버튼 두개, 일반 버튼 두개를 배치를 했습니다.프로그램을 실행할때는 보이지 않다가 첫번째 토글버튼을 클릭하면 원형바가 나타나 작동을 하고, 두번째 토글버튼은 막대형바가 나타나 진행을 합니다. 일반 버튼은 상자를 따로 화면에 띄워서 진행바들을 실행을 시키게 됩니다.
● 액티비티 파일을 작성하겠습니다.
먼저 현재 액티비티와 각각의 객체들을 선언을 합니다.
● 다음으로는 두개의 진행바(원형, 막대형)이 처음 어플을 실행할때는 나타나지 않도록 다음과 같은 코드를 작성하겠습니다.
● 토글버튼을 "Id"값으로 찾아서 위에서 선언한 객체" tb1"과 "tb2"에 담고, 이것들에 대한 클릭이벤트를 작성합니다.
코드 내용을 보면 첫번쨰 토글버튼을 클릭헤서 'On'이 되면 원형 진행바가 나타나게 되고, 'Off'상태가 되면 사라지게 됩니다. 두번째 토글버튼에 같은 방법으로 막대형 진행바를 설정합니다. 그리고 두번째 토글버튼을 눌렀을때 'On' 상태일때 스레드를 실행을 하고 Off일때는 스레드를 종료하게 됩니다.
● 다음은 두개의 버튼에 대한 이벤트를 작성합니다.
두개의 버튼을 "Id"값으로 찾아서 선언했던 객체에 담고, 클릭이벤트를 정의 합니다. 첫번째 버튼에는 원형 진행상자가 실행되다가 5초 후에 자동으로 사라지는 이벤트를 작성하고, 두번째는 막대형 진행상자가 실행되게 합니다. 스레드 방식을 사용하는데, 진행률이 100%가 되면 사라지게 합니다.
● 위에 적용할 스레드를 작성하도록 하겠습니다.
스레드를" volatile"로 선언해서 한번 사용하면 사라지게 합니다. 단어의 뜻대로 휘발성이라는 의미로 한번 사용하고 나서 사라지게 하는것입니다. 그리고 종료하는 메서드와 동기화하기 위해서 syncrhonized를 사용합니다. 객체를 생성하고, 시작전의 진행률을 '0'으로 설정해서 스레드를 시작하게 됩니다. 종료할때는 스레드가 존재할때만 종료를 하고, 객체를 'null'로 초기화 시킵니다. 다음으로 막대형 진행상자를 화면에서 사라지게 하고 두번째 토글버튼을 'Off'시킵니다.
● 다음으로 막대형 진행바의 이동 상태를 0.1초 간격으로 갱신해서 진행하도록 하는 코드입니다.
코드 내용을 살펴보면 백그라운드에서 실행하는 Runnable 객체를 생성하고, Run()메서드로 실행명령을 정의합니다. If문을 사용해서 현재 스레드가"Thread1"일때만 실행을 하게 합니다. 처음 진행률은 '0'으로 설정하고 '100'이 될때까지 반복하게 합니다. 0.1초마다 진행을 하며 핸들러에 메세지를 전달하여, 반복할 때마다 실행할 명령을 핸들에서 정의할 수 있도록 합니다.
두번째로 메세지를 수신할 때마다 실행하는 메서드를 정의합니다. 진행률은 1씩 증가하고 진행바에 표시를 하며, 두번째 토글버튼에 출력하게 합니다. 진행률이 100이되면 스레드를 중단시킵니다.
● 다음으로 원형 진행상자를 출력하고 5초후에 자동으로 사라지게 하는 코드를 작성하겠습니다.
진행상자를 객체에 담고 화면에 나타나게 하며, 제목은 "Loading..." 으로 하고 인내문은 "Please wait.."로 설정해서 진행상자를 5초후에 사라지게 하는 메서드입니다.
진행상자를 사라지게 할 endLoader클래스를 'TimeTask'클래스를 상속받아서 생성합니다. Run()메서드를 진행상자가 있을때만 상자가 사라지게 하고 'null'로 초기화 하는 메서드를 작성합니다.
● 다음은 막대형 진행상자를 생성하고 소멸시키는 코드를 작성하겠습니다.
진행상자 객체를 생성하고 스레드 객체를 "volatile"로 선언하고 스레드를 생성해서 실행하고 진행상자를 출력하는 메서드를 작성합니다. 이어서 진행상자를 종료하는 메서드를 작성하는데요. 스레드가 있으면 null로 초기화 및 중단 하고, 화면에서 사라지게 합니다.
●마지막으로 위쪽의 스레드에서 호출하는 backgroundTread2 실행 객체를 작성합니다.
스레드에서 호출했을 때 실행할 내용을 run()메서드에 작성하는데요. 현재 실행중인 스레드가 막대형 진행상자에 대한것일때만 실행하도록 합니다. 진행률을 0으로 초기화 하고, 전체를 100으로 설정하고 100이 될때까지 진행하게 합니다. 핸들러에 메세지를 보내고, 0.1초마다 반복 하도록 sleep()를 사용합니다.
두번째로 핸들러 메세지가 수신될때 실행하는 메서드를 정의하는데요. 진행률은 1씩 증가하고 막대진행바에 표시하며, 진행상자의 메세지를 백분률로 표시하는 내용입니다.
● 가상기기에서 실행을 해보면서 어떻게 나타나는지 살펴보겠습니다.