Mou*_*ALI 5 java android matrix android-canvas
我正在尝试反映像这样绘制的贴纸
\n原创贴纸----------反光贴纸
\n \xe2\x86\x93 \xe2\x86\x93\n
Run Code Online (Sandbox Code Playgroud)\npublic void reflectCurrentSticker(int windowWidth) {\n\n // Y\n // ----|----- x\n // |\n\n //creation of the cloned sticker\n //getWidth() == width of the FrameLayout (where the stickers drawn)\n\n Matrix originalMatrix = getReflectedMatrix(getWidth(), originalSticker);\n addSticker(clonedSticker);\n clonedSticker.setMatrix(originalMatrix);\n invalidate();\n\n}\n\npublic Matrix getReflectedMatrix(int wrapperWidth, Sticker sticker) {\n Matrix matrix = sticker.getMatrix();\n float transX = getMatrixValue(matrix, 2);\n float transY = getMatrixValue(matrix, 5);\n float newX = (((float) wrapperWidth) - transX) - ((float) sticker.getCurrentWidth());\n float currentAngle = sticker.getCurrentAngle();\n float currentScale = sticker.getCurrentScale();\n Matrix newMatrix = new Matrix();\n newMatrix.postRotate(currentAngle);\n newMatrix.postScale(currentScale, currentScale);\n newMatrix.postTranslate(newX, transY);\n return newMatrix;\n}\n\npublic float getMatrixValue(@NonNull Matrix matrix, @IntRange(from = 0, to = 9) int valueIndex) {\n final float[] matrixValues = new float[9];\n matrix.getValues(matrixValues);\n return matrixValues[valueIndex];\n}\n
Run Code Online (Sandbox Code Playgroud)\n我的代码工作正常,但是当我旋转原始贴纸并尝试从中创建反射贴纸时,问题就开始了,不幸的是,我得到了这个,反射贴纸放置在错误的位置,旋转角度错误。
\n原创贴纸--反光贴纸
\n \xe2\x86\x93 \xe2\x86\x93\n
Run Code Online (Sandbox Code Playgroud)\n预期输出是:
\n原创贴纸----------反光贴纸
\n \xe2\x86\x93 \xe2\x86\x93\n
Run Code Online (Sandbox Code Playgroud)\n为什么postRotate()方法改变X轴方向?
看起来可能是这样,但事实并非如此。首先,你需要明白translate()
,rotate()
操作screw()
需要一个枢轴点。枢轴点位于任何图像/位图的最左上角。其次,Android 总是顺时针旋转图像/位图,而不是逆时针旋转。如果你想逆时针旋转它,你可以将角度 ei 取反,90
但-90
不推荐这样做——这可能会导致错误。相当360 - angle - 180
。所以,这可能就是您想要的。
newMatrix.postScale(-currentScale, currentScale);
newMatrix.postTranslate(sticker.getCurrentWidth, transY);
newMatrix.postRotate(360 - currentAngle - 180);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
289 次 |
最近记录: |