【问题标题】:Matrix ignores position or rotation矩阵忽略位置或旋转
【发布时间】:2012-10-29 17:11:39
【问题描述】:

我正在画布上绘制位图。我试图让这个位图旋转并改变位置。

为此我使用此代码:

 matrix.setTranslate(pos_x, 15);
 matrix.setRotate(30);
 canvas.drawBitmap(bitmap, matrix,paint);

所有这些都在一个循环中,因此变量“pos_x”将增加。

但似乎矩阵不会接受这两条线,setTranslate 和 setRotate。 当我注释掉 setTranslate 时,位图会旋转。当我注释掉旋转时,位图正在移动。但他们不会一起工作!

我该怎么办?

谢谢!

【问题讨论】:

    标签: java android bitmap surfaceview android-canvas


    【解决方案1】:

    问题很可能出在“集合”这个词的含义上。

    与其设置 aka 覆盖矩阵,不如逐步调整它: 要么先 setTranslate 然后 Rotate,要么先 setRotate 然后 Translate。

    【讨论】:

    • 如果库中没有没有前缀“set”的函数,那么可以使用matrixA.setRotate(); matrixB.setTranslate(); 并将它们相乘以获得预期结果。
    • 有Matrix.preRotate和/或Matrix.postRotate的方法。
    • 如何将两个矩阵相乘?
    • @user1469324 你不必这样做。您可以使用Matrix.preRotate 或Matrix.postRotate 方法将旋转连接到现有矩阵中。不过,乘法使用 Matrix.preConcat 或 Matrix.postConcat。
    【解决方案2】:

    对于未来的 Google 员工,

    以 setXXX 开头的矩阵命令将始终重置矩阵。因此,如果您发送一个 setRotate 和一个 setTranslate,那么 setRotate 将被重置并且不会应用。

    幸运的是,您还需要其他命令集:preXXX 和 postXXX

    所以你可以做 preRotate 然后 setTranslate 来实现你想做的事情。

    你甚至可以:

    matrix.preRotate(90);
    matrix.setTranslate(120,120);
    matrix.postScale(2.0f);  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 2011-08-31
      • 1970-01-01
      • 2023-03-22
      • 2019-02-10
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多