2014-04-16 6 views
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 가지 다른 텍스트를 시도 할 때의 결과입니다.

enter image description here

편집 : 그러나 더 나은 enter image description here

이다이 결과를 얻을

  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"는 여전히 볼 수 있습니다 정렬되지 않았습니다. 코드 위

+0

이 무슨 일 대답은? – zgc7009

+0

내가 선택한 텍스트가 여전히 적절하게 가운데에 맞춰 있지 않아도 – user3293494

+2

어디입니까? 스크린 샷을 찍고 실제로 그려지는 것을 보여줄 수 있습니까? – zgc7009

답변

0
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); 

관련 문제