无法在android画布中居中显示文本
我用下面的代码在一个圆圈内写“g”。“g”必须在圆圈内水平和垂直居中。但我不能,我错在哪里无法在android画布中居中显示文本,android,canvas,paint,Android,Canvas,Paint,我用下面的代码在一个圆圈内写“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,
//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;
}
我得到了更好的结果
但是,您可以看到“g”仍然没有对齐
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);
以上代码就是答案无论我选择什么文本,它仍然没有正确居中它在哪里?你能截屏并告诉我们实际绘制的是什么吗?如果你设置
paint.setTextAlign(Align.CENTER)
@zgc7009,你可以节省一些复杂的计算。更新完成了。我想试试,只是看看它的视觉效果,试着把你的drawText部分改成swidth/4-bounds.width()而不是swidth/4-bounds.width()/2
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);