android

Android Custom ProgressBar 만들기

sieunju 2019. 2. 17. 11:03
반응형


[Android ProgressBar?]

[SurfaceView 기반의 ProgressBar]


우선 개발을 하다가 기존 안드로이드에서 제공하는 ProgressBar 클래스가 있는데 이거에 크나큰 문제점을 발견 하였다. 그 문제점인게 무엇이냐면 ProgressBar 가 문제 인게 아니라 Android View 자체의 문제점이라고 있고, Developer 사이트에 들어가면 ProgressBar 는 결국 View 로 상속되어 있는 녀석입니다.

그 말인 즉슨 해당 뷰가 빠르게 갱신해야 하는 요건이 들어오면 사용자가 원하는 만큼의 퍼포먼스를 못본다는 문제입니다.

그래서 Android 니까 이 문제는 해결을 못한다? 기본으로 제공하는 클래스의 한계점이 있어서 이 문제를 해결못한다는거는 말이 안되는 것이라 판단하여 SurfaceView 기반으로 ProgressBar를 만들어 보기로 했습니다.

우선 소스부터 공유 해드리겠습니다. 


attrs.xml




중간 중간 이해하기 쉽도록 주석 처리를 하여 더이상 설명은 안하도록...(귀찮기도 하고..흠..) 만약에 궁금한게 있으시면 댓글 남겨주시길 바랍니다 :D


아무튼 최대한 사용하기 쉽게 코드를 짜보았습니다.  그리고 기존 ProgressBar 에서 사용하는 함수 이름이나, 속성 이름들을 같은 거로 셋팅할려고 했습니다.


만약 여기서 현재 몇 퍼센트까지 왔는지에 대해서 노출 하고 싶다면, runDraw 라는 Runnable 클래스안에 

canvas.drawText 라고 있다. 이부분이 주석 처리 되어있는데 풀고, 이와 관련된 것에 주석을 풀면 됩니다. 


한가지 더 설명하자면.  기본으로 제공하는 ProgressBar 에서 setProgress 라는 함수를 사용하여 현재 진행 상태를 표시하는데, 이 함수는 되도록 사용하지 않는 것을 추천 합니다. 

incrementProgressBy 라는 함수를 사용하는 것을 적극 추천합니다.  이유는 setProgress 라는 함수는 말그대록 현재 진행률을 다시 셋팅해서 View 단에서 그리는 것이고, incrementProgressBy 는 현재 진행 상태에서 증가율을 누적해서 더한후 그리는 것입니다.

아무튼 제가 만든 CustomProgressView 에서도 incrementProgressBy 이 함수를 사용하는 것을 추천 드립니다. 

그리고, 쓰레드나 핸들러 이런거 사용안하고 그냥 반복문에 'incrementProgressBy(int 증가율)' 이 함수를 때려 박으시면 됩니다. 내부적으로 안에서 다 처리 하기 때문에 불 필요한 핸들러 사용은 추천 드리지 않습니다. (오히려 더 느리게 작동될수 있습니다.)


감사합니다.

반응형