首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么postRotate()方法改变X轴方向

为什么postRotate()方法改变X轴方向
EN

Stack Overflow用户
提问于 2021-10-25 23:22:40
回答 1查看 227关注 0票数 5

我在试着把这样的画画出来

原始贴纸

代码语言:javascript
复制
      ↓                           ↓
代码语言:javascript
复制
public void reflectCurrentSticker(int windowWidth) {

    //     Y
    // ----|----- x
    //     |

    //creation of the cloned sticker
    //getWidth() == width of the FrameLayout (where the stickers drawn)

    Matrix originalMatrix = getReflectedMatrix(getWidth(), originalSticker);
    addSticker(clonedSticker);
    clonedSticker.setMatrix(originalMatrix);
    invalidate();

}

public Matrix getReflectedMatrix(int wrapperWidth, Sticker sticker) {
    Matrix matrix = sticker.getMatrix();
    float transX = getMatrixValue(matrix, 2);
    float transY = getMatrixValue(matrix, 5);
    float newX = (((float) wrapperWidth) - transX) - ((float) sticker.getCurrentWidth());
    float currentAngle = sticker.getCurrentAngle();
    float currentScale = sticker.getCurrentScale();
    Matrix newMatrix = new Matrix();
    newMatrix.postRotate(currentAngle);
    newMatrix.postScale(currentScale, currentScale);
    newMatrix.postTranslate(newX, transY);
    return newMatrix;
}

public float getMatrixValue(@NonNull Matrix matrix, @IntRange(from = 0, to = 9) int valueIndex) {
        final float[] matrixValues = new float[9];
        matrix.getValues(matrixValues);
        return matrixValues[valueIndex];
}

我的代码很好,但是当我旋转原来的贴纸时,问题就开始了,然后尝试从它创建一个反射贴纸,不幸的是,我得到了这个,反射贴纸定位在错误的地方,旋转角度不对。

原始贴纸 -- 反射贴纸

代码语言:javascript
复制
      ↓                 ↓

预期产出如下:

原始贴纸

代码语言:javascript
复制
      ↓                           ↓
EN

回答 1

Stack Overflow用户

发布于 2021-10-26 05:21:03

为什么postRotate()方法改变X轴方向?

可能看起来是这样,但事实并非如此。首先,您需要理解translate()rotate()screw()操作需要一个支点。枢轴点位于任何图像/位图的最左上方。其次,Android总是顺时针旋转图像/位图,而不是逆时针旋转。如果你想逆时针旋转它,你可以否定e.i的角度。90-90,但不推荐它--它可能会导致错误。而是360 - angle - 180。这大概就是你想要的。

代码语言:javascript
复制
newMatrix.postScale(-currentScale, currentScale);
newMatrix.postTranslate(sticker.getCurrentWidth, transY);
newMatrix.postRotate(360 - currentAngle - 180);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69715786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档