Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 矩阵忽略位置或旋转_Java_Android_Bitmap_Surfaceview_Android Canvas - Fatal编程技术网

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
进行乘法运算。