Java Can';不要在画布上倒画文本

Java Can';不要在画布上倒画文本,java,android,android-canvas,Java,Android,Android Canvas,我试图在画布上绘制文本,然后旋转画布,使文本倒置显示。但是,它仍然不会颠倒显示。位图显示颠倒,但文本不显示 Canvas canvas = new Canvas(bm); canvas.drawText(text, 0, bm.getHeight()/2, paint); canvas.rotate(180, bm.getWidth()/2, bm.getHeight()/2); 变换画布时,实际上是在对画布执行更新,以便后续绘制调用将被变换。例如,如果要“填充”绘画,请首先平

我试图在画布上绘制文本,然后旋转画布,使文本倒置显示。但是,它仍然不会颠倒显示。位图显示颠倒,但文本不显示

Canvas canvas = new Canvas(bm);
    canvas.drawText(text, 0, bm.getHeight()/2, paint);
    canvas.rotate(180, bm.getWidth()/2, bm.getHeight()/2);

变换画布时,实际上是在对画布执行更新,以便后续绘制调用将被变换。例如,如果要“填充”绘画,请首先平移画布:

canvas.translate(10.0f, 0);
然后在(0,0)上绘制一个矩形:

绘制矩形时,其原点将转换为(10,0),这样就好像调用了
drawRect(10,0)
,因为每个二维点都与当前变换矩阵相乘。这同样适用于其他情况,如旋转和缩放。因此,如果你想画上下颠倒的文本,你必须先应用变换,然后再进行绘画

顺便说一句,要将文本实际上下颠倒,您要寻找的变换不是旋转,而是Y坐标的交换:

canvas.scale(1, -1);
canvas.drawText(text, 0, bm.getHeight()/2, paint);

另外,一定要理解
画布
位图
之间的区别:前者是用于公开各种绘画API的Android API类,后者是图像中实际像素的数组(我记得直到2.3年它都是从本机库分配的,所以永远不要忘记调用
Bitmap.recycle()
或者您很快就会用完可用空间,并从内存异常中获取
信息。
s可能会有所帮助。请先旋转画布,然后在旋转的画布上绘制文本。@Leco将文本倒置旋转。请参阅我的答案below@Raffaele好的,它在SurfaceView实现上对我很有效。我的代码如下:canvas.save();canvas.rotate(-90,padding,screenHeight/2);canvas.drawText(“Text”,padding,screenHeight/2,paint);canvas.restore();当然,90°表示垂直文本,180°仍在旋转。您需要将
y
的符号倒置,这就是
比例(1,-1)
的作用
canvas.scale(1, -1);
canvas.drawText(text, 0, bm.getHeight()/2, paint);