在画布中旋转文本

时间:2013-12-13 17:33:53

标签: android text rotation android-canvas

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

paint.setTextSize(20); 
canvas.drawText("3AM", xStored, yStored, paint);

3 个答案:

答案 0 :(得分:8)

参考此link

 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);

答案 1 :(得分:7)

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

How can you display upside down text with a textview in Android?

引用您可以在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);


}

enter image description here

完整示例:

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();
}
}

对齐

enter image description here

答案 2 :(得分:4)

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

canvas.save();  // svare 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

**编辑 - 这只能反转它,但它将是从前到后的。你实际上需要在text-baseline上镜像,假设这就是你的意思。