音名が付いた丸いラベルが付いたピアノアプリがあります。これらの音名は、ラベルの中央に完全に配置する必要があります。ascent
最後に、 andを使用してそれを垂直に行う方法を見つけましたdescent
。しかし、私はまだ水平方向の配置を完全にうまく行っていません。
主に単一のキャラクターのレンダリングに関するものです。私が何をしても、一部の文字がオフになっています。わずかですが、あります。
たとえば、E がわずかに右にずれており、B が少し左にずれていることに注目してください。
onDraw()
カスタム ビューではなく、でラベルをレンダリングしています。TextView
ラベルのサイズと を使用して試してみましたGravity.CENTER
が、これでも同じ結果が得られました。また、私も試したことに注意してくださいAlign.Center
。
コード:
usedPaint.setTextAlign(Align.LEFT); //Also tried it with Center
Rect textBounds = new Rect();
usedPaint.getTextBounds(infoText, 0, infoText.length(), textBounds);
float textWidth = usedPaint.measureText(infoText);
canvas.drawText(infoText, circleX - (0.5F * textWidth), circleY - ((usedPaint.descent() + usedPaint.ascent())/2),
usedPaint);
canvas.drawRect((circleX - (0.5F* textWidth)), circleY - (0.5F * textBounds.height()), circleX + (0.5F * textWidth), circleY + (0.5F * textBounds.height()), otherPaint);
描画されたボックスの幅は の結果ですmeasureText
。文字では、E
どういうわけか左側の空白が測定され、文字が右側にずれていることがわかります。
これは Android 4.0.3 の標準フォントを使用しています。カスタム TTF フォントを使用すると、同じ種類の問題が発生しますが、文字ごとに異なります。
他に何ができるのだろうか?(それを乗り越えることに加えて;))