有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java drawScaledText()不适用于righttoleft语言

我试图在从右向左的语言(希伯来语)上使用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) 个答案