我正在尝试以从右到左的语言(希伯来语)使用drawScaledText()并翻转字母,如this link所示。
这是确切的代码:
@Override
protected void onDraw(Canvas canvas) {
TextPaint paint = getPaint();
paint.setColor(getCurrentTextColor());
paint.drawableState = getDrawableState();
mViewWidth = getMeasuredWidth();
String text = (String) getText();
mLineY = 0;
mLineY += getTextSize();
Layout layout = getLayout();
for (int i = 0; i < layout.getLineCount(); i++) {
int lineStart = layout.getLineStart(i);
int lineEnd = layout.getLineEnd(i);
String line = text.substring(lineStart, lineEnd);
float width = StaticLayout.getDesiredWidth(text, lineStart, lineEnd, getPaint());
if (needScale(line) && i != layout.getLineCount()-1 ) {
//THIS IS THE LINE FLIPS RTL TEXT
drawScaledText(canvas, lineStart, line, width);
} else {
//IF I BYPASS THE ABOVE IF STATEMENT, THIS LINE DOESN'T FLIP TEXT
canvas.drawText(line, 0, mLineY, paint);
}
mLineY += getLineHeight();
}
}
此代码证明文本是正确的,来自this repo。
为什么这个/我怎么能绕过这个?我在某个地方看到,可以使用drawTextOnPath()
来代替drawScaledText()
,方法是沿着一条从右边开始并向左移动的线
(Android canvas drawText from right to left)
不幸的是,这个问题的答案并没有真正解释他们的意思,我无法让这个工作起作用
TL; DR:我想绘制合理的RTL文本。 drawScaledText()
由于某种原因翻转文字。还有另一种在指定范围内绘制文本的方法吗?