drawScaledText()不适用于从右到左的语言

时间:2015-10-31 23:44:35

标签: java android arabic hebrew

我正在尝试以从右到左的语言(希伯来语)使用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()由于某种原因翻转文字。还有另一种在指定范围内绘制文本的方法吗?

0 个答案:

没有答案