캔버스으로 그려진 문자열을 완벽하게 정렬하고 싶습니다. 그때 너무렌더링 된 텍스트 문자열의 크기 계산 (렌더링 전에)
Paint p = new Paint();
Canvas c = holder.lockCanvas();
String centered_text = "Hello World";
과 같은 코드를 가지고 있다면 그래서 내가 할 것
이제p.setTextSize(35);
p.setStyle(Style.STROKE);
중간에 내 문자열을 그려 내 페인트 스타일 및 크기 설정
c.drawText(centered_text, c.getWidth()/2, c.getHeight()/2, p);
하지만 실제로는 내 텍스트를 가운데에 배치하지 않을 것이고, 왼쪽 상단을 가운데에 놓을 것입니다. 그 중심에 나는 Strings litteral 너비와 높이 (픽셀 단위)가 문자가 아님을 알아야합니다.
int string_width = centered_text.getWidth(); //String.getWidth() is not a real methode
int string_height = centered_text.getHeight(); //String.getHeight() is not a real methode
c.drawText(centered_text, (c.getWidth()/2)-(string_width/2), (c.getHeight()/2)-(string_height/2), p);
이
텍스트 만String.getWidth()
및 String.getHeight()
실제 methodes없는 중심 것입니다. 그래서 내 생각은 폭과 높이을 찾기 위해 텍스트의 크기과 문자열의 크기을 사용하는 것입니다. 그래서 테의 라인을 따라 뭔가 : int string_width = centered_text.length()*p.getTextSize();
int string_height = p.getTextSize();
그러나 다른 문자는 다른 크기 때문에이 잘못 같은 느낌이 ... 사람이 어떤 생각을 가지고있다.
대답은 없지만 : 예, 고정 폭 글꼴을 사용하지 않으면 다른 문자의 너비가 달라집니다. 또한, 렌더링이 충분히 향상되면 커닝 (kerning) (즉, 글꼴 사이에 가변적 인 공간)이 도입 될 수 있습니다. 마지막으로, 가장 높은 글자와 기준선의 중간에 세로로 정렬하지 않고 글꼴의 X 높이에서 기준선까지 정렬하는 것이 좋습니다. – Miquel
어떤 라이브러리를 사용하고 있습니까? SWT에는 getStringExtent (String)이있다. [이 튜토리얼] (http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/DemonstratesFontMetricsandextents.htm)을 확인하십시오. – Miquel