java - 无法在 Canvas 中颠倒绘制文本

标签 java android android-canvas

我正在尝试在 Canvas 上绘制文本,然后旋转 Canvas 以使文本上下颠倒显示。但是它仍然没有颠倒显示。位图显示颠倒,但文本却不然。

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

最佳答案

当您转换 Canvas 时,您实际上是在 transformation matrix 上执行更新,这样后续的绘画调用就会被转化。举个例子,如果你想“填充”你的画,你首先要平移 Canvas :

canvas.translate(10.0f, 0);

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

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

绘制矩形时,其原点将转换为 (10, 0),这样就好像您调用了 drawRect(10, 0),因为每个 2D 点都会相乘通过当前的变换矩阵。其他affine transformations也是如此。 ,如旋转和缩放。因此,如果您想绘制颠倒的文本,则必须首先应用变换,然后然后绘画。

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

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

另外,请务必了解 CanvasBitmap 之间的区别:前者是用于公开各种绘画 API 的 Android API 类,后者是图像中实际像素的数组(我记得直到 2.3 为止它都是从 native 库分配的,所以永远不要忘记调用 Bitmap.recycle() ,否则你很快就会耗尽可用空间,并且获取 OutOfMemoryExceptions。

关于java - 无法在 Canvas 中颠倒绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735121/

相关文章:

android - windows下调试Android NDK

java - 如何将 ListView 滚动到 Android 上的特定位置?

android - 在中心的椭圆路径上绘制文本

android - android Canvas 上位图的闪烁

java - 持久异常 : unexpected error when rollbacking

java在linux上执行进程

java - 执行教程时Tomcat报错

java - 从 Android 应用程序在 openfire 上创建一个组

android - Proguard 导致崩溃

android - 自定义 View : onMeasure Height vs Canvas. 高度