Java 矩阵忽略位置或旋转
我正在画布上绘制位图。我试图让这个位图旋转并改变位置 为此,我使用以下代码:Java 矩阵忽略位置或旋转,java,android,bitmap,surfaceview,android-canvas,Java,Android,Bitmap,Surfaceview,Android Canvas,我正在画布上绘制位图。我试图让这个位图旋转并改变位置 为此,我使用以下代码: matrix.setTranslate(pos_x, 15); matrix.setRotate(30); canvas.drawBitmap(bitmap, matrix,paint); 所有这些都在一个循环中,所以变量“pos_x”会增加 但似乎矩阵不能同时接受这两行,setTranslate和setRotate。 当我注释掉setTranslate时,位图会旋转。当我注释掉旋转时,位图正在移动。但他们不会
matrix.setTranslate(pos_x, 15);
matrix.setRotate(30);
canvas.drawBitmap(bitmap, matrix,paint);
所有这些都在一个循环中,所以变量“pos_x”会增加
但似乎矩阵不能同时接受这两行,setTranslate和setRotate。
当我注释掉setTranslate时,位图会旋转。当我注释掉旋转时,位图正在移动。但他们不会一起工作
我该怎么办
谢谢 最有可能的问题是“集合”一词的含义 与其设置aka覆盖矩阵,还不如逐步调整: 要么先设置平移然后旋转,要么先设置旋转然后平移。对于未来的谷歌 以setXXX开头的矩阵命令将始终重置矩阵。因此,如果发送一个setRotate,然后发送一个setTranslate,setRotate将被重置,并且不会应用 幸运的是,您必须使用其他命令集:preXXX和postXXX 因此,您可以执行预旋转,然后设置平移,以实现您想要执行的操作 你甚至可以:
matrix.preRotate(90);
matrix.setTranslate(120,120);
matrix.postScale(2.0f);
如果库中没有前缀为“set”的函数,那么可以使用
matrixA.setRotate();matrixB.setTranslate()编码>并将它们相乘以获得预期的结果。对于此矩阵有几种方法。预旋转
和/或矩阵。后旋转
。如何将两个矩阵相乘?@user1469324您不必这样做。您可以使用Matrix.preRotate
或Matrix.postRotate
方法将旋转合并到现有矩阵中。使用Matrix.preConcat
或Matrix.postConcat
进行乘法运算。