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

View onDraw 질문드립니다. [closed]

0 추천

안녕하세요. 파인트리 라고 합니다.

맨날 xml 로 UI 작업하다가 그래프 작업 때문에 

View 에 onDraw 에서 이미지와 라인을 그리고 있습니다.

그런데 문제가 자꾸 앱이 죽어버립니다.

Activity 에 상단에 두개의 버턴이 있습니다.

버턴 1 : 리스트 보입니다.

버턴 2: 통계 그래프가 보입니다.

이 버턴 두개로 리스트봐 그래프를 그리는 뷰를 

visiable / gone 처리하여 보여지게 합니다.

그런데, 버턴 1, 2 를 계속 번갈아 선택하여 화면이 변경하면

어느 순가에 앱이 그냥 죽어버리는데요.

그래프를 그리는 뷰쪽에서 문제가 발생하는 것으로 보입니다.

에러는 Fatal signal 11 (SIGSEGV) at ... 이런입니다.

나올 때도 있고, 에러도 안나고 죽을 때고 있습니다.

여러 부분을 체크해보니 bitmap 이미지를 사용할때 문제가 되는 것 같습니다.

로직을 찍을 때보면 분명 onDraw 는 한번만 호출되는 것 같은데요.

왜 몇번 반복해서 1,2 화면을 보이게 안보이게 하면 문제가 되는 모르겠습니다.

onDraw에서는 하는 소스는 아래와 같습니다.

 

int w = this.getWidth();
int h = this.getHeight();
 
// 상단 / 중단 / 하단  비율로 분기.
float bg1H = h * 0.4f;
float bg2H = h * 0.45f;
float bg3H = h * 0.15f;
 
LogUtil.d("bg1H = " + bg1H + ", bg2H = " + bg2H + ", bg3H = " + bg3H);
 
Paint p = new Paint();
p.setTypeface(Typeface.MONOSPACE);
 
// 배경 이미지 및 색상 처리.
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.weight_top_bg);
BitmapShader bs = new BitmapShader(b, TileMode.REPEAT, TileMode.MIRROR);
p.setShader(bs);
canvas.drawRect(0, 0, w, bg1H, p);
 
 
b = BitmapFactory.decodeResource(getResources(), R.drawable.weight_bottom_bg);
bs = new BitmapShader(b, TileMode.REPEAT, TileMode.MIRROR);
p.setShader(bs);
canvas.drawRect(0, bg1H, w, bg1H + bg2H, p);
 
 
p.setColor(Color.parseColor("#91c5db"));
canvas.drawRect(0, bg1H + bg2H, w, h, p);
 
위 코드 중 무엇이 잘 못 되었을까요?
 
정말 답답해 죽겠습니다.
 
고수님들 답변 부탁 드립니다.ㅠㅠ

 

질문을 종료한 이유: 자답입니다. onDraw 에서 Bitmap 생성하지 말아야하네요..한번은 괜찮은데..해당 view 를 visiable/gone 을 반복하니 비트맵이 이상해지네요.
파인트리 (150 포인트) 님이 2014년 6월 23일 질문
파인트리님이 2014년 6월 23일 closed
...