0

音名が付いた丸いラベルが付いたピアノアプリがあります。これらの音名は、ラベルの中央に完全に配置する必要があります。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 フォントを使用すると、同じ種類の問題が発生しますが、文字ごとに異なります。

他に何ができるのだろうか?(それを乗り越えることに加えて;))

4

1 に答える 1

0

中央揃えで canvas.drawText(infoText, circleX - (0.5F * textWidth), ... を canvas.drawText(infoText, circleX, ... に変更)

于 2013-06-15T21:52:37.643 に答える