在画布中旋转文本

ind*_*ger 1 android text rotation android-canvas

如何旋转画布中的文本?我需要翻转我颠倒过来的文字.

paint.setTextSize(20); 
canvas.drawText("3AM", xStored, yStored, paint);
Run Code Online (Sandbox Code Playgroud)

Nam*_*mbi 8

请参阅此链接

 int x = 75;
    int y = 185;
    paint.setColor(Color.GRAY);
    paint.setTextSize(25);
    String rotatedtext = "Rotated helloandroid :)";

    //Draw bounding rect before rotating text:

    Rect rect = new Rect();
    paint.getTextBounds(rotatedtext, 0, rotatedtext.length(), rect);
    canvas.translate(x, y);
    paint.setStyle(Paint.Style.FILL);

    canvas.drawText(rotatedtext , 0, 0, paint);
    paint.setStyle(Paint.Style.STROKE);
    canvas.drawRect(rect, paint);

    canvas.translate(-x, -y);


    paint.setColor(Color.RED);
    canvas.rotate(-45, x + rect.exactCenterX(),y + rect.exactCenterY());
    paint.setStyle(Paint.Style.FILL);
    canvas.drawText(rotatedtext, x, y, paint);
Run Code Online (Sandbox Code Playgroud)


Rag*_*dan 7

我从Romain Guy的评论中得到了接受答案的解决方案

如何在Android中使用textview显示颠倒文本?

引用您可以在Y轴上按-1进行缩放.

  @Override 
  protected void onDraw(Canvas canvas) {
      super.onDraw(canvas);
      int cx = this.getMeasuredWidth() / 2;
      int cy = this.getMeasuredHeight() / 2;
      canvas.scale(1f, -1f, cx, cy);
      canvas.drawText("3AM", cx, cy, p);


}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

完整示例:

public class SView extends View {

    Paint p,paint; 
    public SView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        p = new Paint();
        p.setColor(Color.RED);
        p.setTextSize(40);
        paint = new Paint();
        paint.setColor(Color.BLUE);
        paint.setTextSize(40);
    }
  @Override 
  protected void onDraw(Canvas canvas) {
      super.onDraw(canvas);
      int cx = this.getMeasuredWidth() / 2;
      int cy = this.getMeasuredHeight() / 2;

      canvas.drawText("3AM", cx, cy, paint);
      canvas.save(); 

      canvas.scale(1f, -1f, cx, cy);
      canvas.drawText("3AM", cx, cy, p);
      canvas.restore();
}
}
Run Code Online (Sandbox Code Playgroud)

快照

在此输入图像描述


Ker*_*rry 5

您需要在drawText()调用之前旋转画布:

canvas.save();  // save the current state of the canvas
canvas.rotate(180.0f); //rotates 180 degrees
canvas.drawText("3AM", xStored, yStored, paint);
canvas.restore(); //return to 0 degree
Run Code Online (Sandbox Code Playgroud)

**编辑-这只会将其反转,但是会从头到尾。实际上,您需要在文本基准上进行镜像,假设这就是您的意思。