0
다음 코드를 사용하여 원 안에 "g"를 씁니다. "g"는 원 안에 수평 및 수직으로 가운데에 있어야합니다. 그러나 나는 할 수 없다, 나는 어디에서 틀린가?안드로이드 캔버스에 텍스트를 가운데에 맞출 수 없습니다.
//sv is surfaceview which covers whole screen
sv.getHolder().addCallback(new SurfaceHolder.Callback()
{
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
// surfaceview width
swidth=sv.getWidth();
sheight=sv.getHeight();
int height = sheight/3;
int mat = Math.min(height,swidth/2);
Paint paint= new Paint(Paint.ANTI_ALIAS_FLAG);
Paint paint1= new Paint(Paint.ANTI_ALIAS_FLAG);
Resources r = getResources();
paint.setColor(Color.CYAN);
paint1.setColor(Color.BLACK);
Canvas c = sv.getHolder().lockCanvas();
c.drawARGB(254, 254, 254, 254);
String t1="g";
int ttwidth=determineMaxTextSize(t1, mat/4);
paint1.setTextSize(ttwidth);
Rect bounds = new Rect();
paint1.getTextBounds(t1, 0, 3, bounds);
c.drawCircle(swidth/4, height+height/2, mat/4, paint);
c.drawText(t1, swidth/4-bounds.width()/2, height+height/2+bounds.height()/2, paint1);
sv.getHolder().unlockCanvasAndPost(c);
}
위의 코드에서 사용한 방법입니다.
private int determineMaxTextSize(String str, float maxWidth)
{
int size = 0;
Paint paint = new Paint();
do {
paint.setTextSize(++ size);
} while(paint.measureText(str) < maxWidth);
return size;
}
다음은 4 가지 다른 텍스트를 시도 할 때의 결과입니다.
편집 : 그러나 더 나은
이다이 결과를 얻을 이
paint1.setTextAlign(Align.CENTER);
String t1="N";
int ttwidth=determineMaxTextSize(t1, mat/4);
paint1.setTextSize(ttwidth);
Rect bounds = new Rect();
paint1.getTextBounds(t1, 0, 3, bounds);
c.drawCircle(swidth/4, height+height/2, mat/4, paint);
c.drawText(t1, swidth/4, height+height/2+bounds.height()/2, paint1);
내 코드를 편집 한 후에는 "g"는 여전히 볼 수 있습니다 정렬되지 않았습니다. 코드 위
이 무슨 일 대답은? – zgc7009
내가 선택한 텍스트가 여전히 적절하게 가운데에 맞춰 있지 않아도 – user3293494
어디입니까? 스크린 샷을 찍고 실제로 그려지는 것을 보여줄 수 있습니까? – zgc7009