我有一个应用程序也有阿拉伯语,但我的阿拉伯语用户有一个问题,drawText翻转单词..阿拉伯语必须从右到左。如何从右到左制作画布drawText?
在图片中看到突出显示的文本是正确的文本,它是一个textView,它很好。但画布DrawText是圆圈中的一个是错误的。它必须是从右到左,如何从右到左制作画布drawText?
答案 0 :(得分: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);
答案 1 :(得分:0)
确保包含阿拉伯语的Android模拟器,我有同样的问题,但当我在实际的移动设备上尝试应用程序时,它解决了。 您的应用程序在该语言中没有问题,请确保Android模拟器支持阿拉伯语
答案 2 :(得分: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字符串中我们也有相同的结果。
答案 3 :(得分:-1)
如果目标设备的api级别大于11,则可以在TextView元素中使用rotateY = 180属性。父视图也应设置为rotateY = 180。