마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

커스텀뷰 ondraw에서 반복문에 의한 부하발생 문제

0 추천
터치이벤트에서 손가락의 좌표에 따라 스크롤이 되는 커스텀 뷰를 만들었습니다.
그 스크롤이 되는 뷰는 막대바가 그려질 좌표를 가진 ArrayList에서 좌표들을 읽어와 그립니다.
ArrayList이기 때문에 for문을 돌려서 막대바를 그립니다. (drawRect)
그런데 ArrayList의 사이즈가 클수록 for문을 많이 돌리게 되므로 부하가 걸립니다.
스크롤할때 스크롤함으로써 새로그려질 부분을 제외한 부분은 바뀌지 않고 이동만 하는것이므로 이미지로 저장하여 움직이고,
스크롤된 부분만을 for문을 돌려서 그리면 부하가 사라질까 싶은데요.
감이 안잡힙니다. 어떤 방식으로 구현할 수 있을까요? 혹시나 이 방법 말고 다른 더 좋은 방법이 있다면 가르쳐주세요 .

감사합니다.
슈퍼꽃붕어 (1,600 포인트) 님이 2015년 11월 30일 질문

1개의 답변

0 추천
좌우 스크롤이었던가요? 리스트 뷰의 setSelection(int index) 방식을 응용해보는건 어떨까요?

스크롤 뷰의 크기는 좌우던 상하던 해당영역을 풀로 잡고 touch move 동작에 따라 리스트뷰 setselection 을

변경하는 방법으로 말이죠.. 예를들자면 리스트가 10이고 스크롤의 크기가 1000px 이라고 가정했을때

100px 위치로 갔을 경우 10% 이상의 위치에 있으니 listview 의 setSelection의 index 값을 2로 주는

방법으로 주면 굳이 그려주지 않아도 문제가 해결되지 않을까요?
라쎄린드 (25,460 포인트) 님이 2015년 11월 30일 답변
잘 모르겠네요...ㅎㅎ.. setSelection 방식은. 스크롤되는 위치를 변경하는 의미인것 같은데. 결국 onDraw에서 해당위치에 대한 그림을 그려줘야 하는것.. 아닌가요 ㅎㅎ??
정확하게 님이 구현한 화면이 어떤건지 몰라서 제대로 된 답변을 줄수가 없네요 ㄷㄷㄷ직접 하나하나 그리는것보다는 기본API 를 사용하는것이 좋지 않을까 해서요, 애초에 리스트 뷰라는 이미 스크롤이 되는 뷰가 있는데 y 값을 조절하면서 보여주는게 정상이지 draw 시켜주는게 쪼끔 이해가 안되네용...
회사 소스라 ... 자세히 적지를 못하겠네요. 다양한 기능이 있어요~ 줌도 있고, 애니메이션기능도 있고요.. 스크롤, 더블탭 등등... 그래서 못쓸거에요 아마..ㅎㅎㅎ 이미 뷰자체를 바꾸기엔 좀 너무 많은 기능이 들어가있네요
...