안드로이드 MPAndroidChart 그래프 갱신 안될 때

프로그래밍/Android 관련2018. 3. 18. 05:53

안녕하세요. 개발자 드리머즈입니다.


MPAndroidChart 이용 중에 겪은 간단한 이슈를 발견해 정리합니다.




문제 현상

HorizontalBarChart 사용시 차트 갱신이 제대로 되지 않았습니다. 어플 내의 특정 버튼을 누르면 HorizontalBarChart를 갱신하도록 했는데, 특정 버튼을 눌러도 그래프가 보이지 않고 HorizontalBarChart 영역을 터치하면 그제서야 그래프가 보였습니다.

원인

MPAndroidChart에선 invalidate()함수를 호출해야 그래프가 제대로 보이는 것 같습니다.

해결 방법

아래의 코드처럼 그래프를 보여주고 싶은 시점에 invalidate()함수를 호출하면 됩니다.


1
2
3
4
5
6
7
BarData data = new BarData(dataSets);
data.setValueTextSize(10f);
data.setValueTypeface(mTfLight);
data.setBarWidth(barWidth);
horizontalBarChart.setData(data);
 
horizontalBarChart.invalidate();
cs

참고

invalidate의 뜻을 영어사전에서 찾아보면 "무효화 시키다"라는 뜻이 있습니다. (invalid(타당하지 않은)에서 파생된 동사 같음)

왜 MPAndroidChart에서 뿐만 아니라 다른 클래스에서도 invalidate가 그래프나 View의 갱신을 의미하는지 찾아봤습니다.


https://stackoverflow.com/questions/7342659/why-use-the-word-invalidate-to-request-a-view-to-be-redrawn


invalidate라는 이름을 가진 이유는 현재 보여지는 그래프나 View 등이 더 이상 타당하지 않다는 것을 의미하기 때문입니다. 그러기에 동시에 갱신이 필요하다는 것을 의미합니다.

또한 왜 그냥 간단하게 redraw() 라는 이름으로 명명되지 않은 이유는, 만약 이렇게 이름이 지어졌다면 이 함수를 부르자마자 다시 그리는 것으로 오해할 수 있다고 합니다. 실제로 invalidate()는  (사용자는 즉각적으로 다시 그린다고 느끼는 것 같지만) 즉각적으로 다시 그리는 것이 아니라 안드로이드 시스템 라이브러리가 준비가 되면 다시 그린다고 합니다.



작성자

Posted by 드리머즈

관련 글

댓글 영역