画布绘制文本的方向。

12

如何让文字垂直书写?如何将文本旋转90度?逐个字母地书写很愚蠢,但是现在我不知道其他方法。

 Paint paint = new Paint();
 public DrawView(Context context, double arr[])
{
    super(context);
    paint.setColor(Color.BLACK);
}
   @Override
   public void onDraw(Canvas canvas)
    {
      canvas.drawText("Test",50, 50, paint);
    }

你的问题有些不清楚:你想旋转整个文本(这样你需要“扭头”来阅读它),还是想让字符排列在彼此下方(而不是旋转)? - Veger
我对两个选项都很感兴趣。 - Kostya Khuta
2个回答

33

简单地旋转文本(或其他任何东西)非常容易:使用rotate()方法旋转画布(之后将其旋转回来,否则您绘制的一切都会被旋转):

canvas.save();
canvas.rotate(90f, 50, 50);
canvas.drawText("Text",50, 50, paint);
canvas.restore();

save()restore()方法分别保存了画布的状态并将其恢复,因此您绘制的其他元素不会旋转。如果您只想绘制文本,则这两种方法是不必要的。

如果您想将字符串的字符放在彼此下面,则需要逐个处理每个字符。首先需要获取字体高度,然后在绘制每个字符时,需要一遍又一遍地将y坐标增加此高度。

int y = 50;
int fontHeight = 12; // I am (currently) too lazy to properly request the fontHeight and it does not matter for this example :P
for(char c: "Text".toCharArray()) {
    canvas.drawText(c, 50, y, paint);
    y += fontHeight;
}

谢谢!一切都正常工作,但是我写成了canvas.save()而不是canvas.store()。 - Kostya Khuta
感谢您的有益回答! - myforums
请注意,旋转和绘制文本中的参数50,50是相同的,如果您在其他坐标系下进行绘制,则旋转也应传递相同的坐标系。这些参数是旋转的轴点(不会被旋转改变)。 - Siddarth G

0

正确的版本是: Canvas canvas_front = new Canvas(bitmap_front);

    Paint paint = new Paint();
    paint.setColor(Color.rgb(140, 0, 0));
    paint.setAlpha(80);
    paint.setStrokeWidth(2);

 canvas_front.drawLine(0, (float) (frontIV.getHeight() * 0.9),frontIV.getWidth(), (float) (frontIV.getHeight() * 0.9), paint);

    canvas_front.save();
    canvas_front.rotate((float)  90 , 50, 50);
    canvas_front.drawText("Text",50, 50, paint);
    canvas_front.restore();
    frontIV.setImageBitmap(bitmap_front);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接