0

我也有一个处理阿拉伯语的应用程序,但是我的阿拉伯语用户有一个问题,即 drawText 翻转单词 .. 阿拉伯语必须从右到左。如何使画布从右到左绘制文本?

在此处输入图像描述

在图片中看到突出显示的文本是正确的文本,它是一个 textView,它很好。但是画布中的 DrawText 是错误的。必须是从右到左,如何让画布drawText从右到左?

4

4 回答 4

1

在画布上,只需在要绘制文本的两侧创建两个点,然后在它们之间创建路径。使用这个方法会很好用

Path path = new Path();
Paint paint = new Paint();
path.moveTo(p2.x, p2.y);
path.lineTo(p1.x, p1.y);
canvas.drawTextOnPath(String.valueOf(txt), path, (float) (c.getWidth() / (2.3)),  (float) (c.getHeight()/2 + paint.getTextSize()/1.5), paint);
于 2012-08-25T13:22:06.080 回答
0

确保包含阿拉伯语的 Android 模拟器,我遇到了同样的问题,但是当我在实际的移动设备上尝试该应用程序时,它解决了。您的应用程序的语言没有问题,请确保 Android 模拟器支持阿拉伯语

于 2012-08-30T15:49:56.467 回答
0

您可以从字符串中获取 subString 并在画布中绘制:

            Paint textPaint = new Paint();
            textPaint.setColor(Color.BLACK);
            textPaint.setStyle(Paint.Style.FILL_AND_STROKE);
            textPaint.setTextSize(20);
            textPaint.setTypeface(Typeface.DEFAULT_BOLD);
            textPaint.setStrokeWidth(1);


            String subString = mString;
            float textWidth = textPaint.measureText(mString);

           int endOffset = Math.round(rectWidth * (mString.length() - 1) / textWidth);
            if (textWidth > rectWidth) {
                endOffset =endOffset - 2;
                subString = mString.substring(0, endOffset);
                subString = subString + "..";
            }else{
                for(int j=mString.length();j<endOffset+1;j++){
                    subString+=" ";
                }
            }


            canvas.drawText(subString, padding , (float) (startHeight + eachHeight / 3 + textPaint.getTextSize() / 1.5), textPaint);

这样,即使在 RTL 或 LTR string 中,我们也有相同的结果。

于 2016-07-12T05:38:58.463 回答
-1

如果您的目标设备的 api 级别大于 11,您可以在 TextView 元素中使用 rotateY=180 属性。父视图也应该设置为 rotateY = 180。

于 2014-03-18T07:52:37.857 回答