2010/05/06

[Android Dev.] Canvas.drawPosText 의 불편한 진실

이전 Android 에서의 2D Drawing 에 관련한 글을 올렸었는데 그 글에서 drawPosText 함수의 에러에 대한 글을 썼었다.



2010/05/06 - [Dev Story/Android] - [Android Dev.] 2D Drawing



다른 텍스트 출력은 문제가 없는데 drawPosText 함수만 호출하면 문제가 발생하여 그에 대한 원인을 찾느라 시간을 좀 허비했다. API 문서를 좀더 자세히 읽어 봤더라면 시간을 절약할 수 있었을 것이다.



이 함수는 아래와 같은 형태를 갖고 있다.



public void  drawPosText(String  text, float[] pos, Paint  paint)




Parameters

text     The text to be drawn

pos     Array of [x,y] positions, used to position each character

paint     The paint used for the text (e.g. color, size, style)




함수만 보고 이 함수의 기능이 주어진 문자를 주어진 좌표 배열에 출력을 해주는 것이라고 생각하고 아래와 같은 코드로 테스트를 해 보았다.

myPaint.setARGB( 0, 255, 0, 255 );
float[] pos = new float[] {
60, 50,
60, 420
};
canvas.drawPosText( "Android drawPosText", pos, myPaint );





이 코드가 60,50 과 60,420 좌표에 "Android drawPosText"를 그려 줄 것이라고 예상을 했지만 예상을 깨고 에러 화면만을 보여 주었다.

잘못 된 drawPosText 함수 사용에 따른 에러화면

잘못 된 drawPosText 함수 사용에 따른 에러화면



어렵게 예제 자료를 찾아서 확인해 보았더니 drawPosText 함수의 기능을 주어진 문자열의 각 문자를 좌표 배열의 각각의 위치에 출력하는 기능이였다. API 문서에도 아래와 같이 설명이 되어 있었다.


Draw the text in the array, with each character's origin specified by the pos array.




그래서 아래와 같은 코드로 테스트를 해 보았더니 에러 없이 문자를 출력해 주었다. (보라색 비뚤비뚤 Android 글자)

myPaint.setARGB( 128, 255, 0, 255 );
float[] pos = new float[] {
160, 20,
170, 25,
180, 20,
190, 25,
200, 20,
210, 25,
220, 20
};
canvas.drawPosText( "Android", pos, myPaint );



Canvas의 drawPosText 를 이용한 문자 출력

Canvas의 drawPosText 를 이용한 문자 출력





아래 코드를 수행하여 보면 보다 명확하게 알 수 있다.

Paint paint = new Paint();
paint.setColor( Color.GREEN );
float[] pos = new float[] { 60, 50, 60, 420 };
String strMsg = "AB";
canvas.drawPosText( strMsg.toCharArray(), 0, strMsg.length(), pos, paint );



Canvas의 drawPosText 를 이용한 문자 출력

Canvas의 drawPosText 를 이용한 문자 출력



<

Original Post : http://neodreamer-dev.tistory.com/432

No comments :

Post a Comment