无法在Canvas中颠倒绘制文本

时间:2013-03-31 22:06:44

标签: 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);

1 个答案:

答案 0 :(得分:3)

转换画布时,实际上是在transformation matrix上执行更新,以便后续的绘制调用将被转换。例如,如果要“填充”您的绘画,首先要翻译画布:

canvas.translate(10.0f, 0);

然后在(0,0)上绘制一个Rect:

canvas.drawRect(0, 0, 20, 10);

矩形将绘制,其原点转换为(10,0),因此它就像你调用drawRect(10, 0)一样,因为每个2D点都乘以当前的变换矩阵。这同样适用于其他affine transformations,例如旋转和缩放。因此,如果您想要绘制颠倒的文字,您必须应用转换第一个,然后然后绘画。

顺便说一下,要实际颠倒绘制文本,您要查找的转换不是 rotation ,而是Y坐标的 swap

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

另外,请务必了解CanvasBitmap之间的区别:前者是用于公开各种绘图API的Android API类,后者是实际像素的数组在图像中(我记得直到2.3它是从本地库中分配的,所以永远不要忘记拨打Bitmap.recycle(),否则你很快就会占用可用空间并获得OutOfMemoryException