【问题标题】:How do I pivot a matrix rotation on a point other than 0,0 when using PathMeasure.getMatrix()使用 PathMeasure.getMatrix() 时,如何在 0,0 以外的点上旋转矩阵
【发布时间】:2013-05-31 07:42:51
【问题描述】:

我正在沿画布上的路径移动位图。路径有各种曲线,位图也随之而来。当 pm.getMatrix 通过 PathMeasure.POSITION_MATRIX_FLAG 和 TANGENT_MATRIX_FLAG 时,它在处理路径上的位置和旋转调整方面做得非常好,但是,它会旋转以 0,0 坐标为轴的位图。我需要它以位图的中心为中心。

我在调试器中破解了矩阵,看来确实*没有勺子。然而,有 3 个浮点数组,每个数组包含 3 个浮点数。我猜如果我能得到这些值,我可能会弄清楚它们中的哪一个描述了对象的旋转,并且可能有一些方法可以改变枢轴点?我认为没有其他方法可以做到这一点......希望至少能得到一些关于这三个浮点数组实际描述的指导。

PathMeasure pm = new PathMeasure(playerPath, false);
float fSegmentLen = pm.getLength() / numSteps;
Matrix mxTransform = new Matrix();

pm.getMatrix(fSegmentLen * iCurStep, mxTransform,
                    PathMeasure.POSITION_MATRIX_FLAG + PathMeasure.TANGENT_MATRIX_FLAG );
canvas.drawBitmap(playerCar, mxTransform, null);

【问题讨论】:

    标签: android matrix path rotation


    【解决方案1】:

    试试这个:

    private void setDrawingMatrix(float distance) {
        pm.getMatrix(distance, mxTransform, PathMeasure.POSITION_MATRIX_FLAG | PathMeasure.TANGENT_MATRIX_FLAG);
        mxTransform.preTranslate(-playerCar.getWidth() / 2.0f, -playerCar.getHeight() / 2.0f);
    }
    

    然后在onDraw方法中:

    canvas.drawBitmap(playerCar, mxTransform, null);
    

    快乐驾驶...

    【讨论】:

    • 这完全有效......谢谢......如果你有时间解释它实际上在做什么,我真的很感激......为什么将汽车移动到 -1/2width 和-1/2height 让它在它的中心旋转?
    • 如果您不明白,请不要担心,(文档帮不上忙...)对我来说它仍然是一种黑魔法,但阅读此jaypthakkar.blogspot.com/2013/04/… 可能会有所帮助...跨度>
    • 顺便说一句,如果您使用 postTranslate 与 preTranslate,请查看区别
    • funny...我实际上对那个链接上的东西很熟悉。这种特殊的翻译更加神秘,因为我不知道 pm.getMatrix() 的实际作用。但是,我怀疑它工作的原因是 preTranslate 会影响开始时的值,因此,本质上,它会在两个轴上将汽车移动 1/2,然后旋转仍然 *认为它正在旋转 0,0 坐标,只是现在汽车的中心位于该坐标处。 (至少这是我的猜测)。
    • 我无法更好地解释 :) 遗憾的是,文档在这方面太差了,最好的办法就是调用 pre/pist Teanslate/Scale/Rotate,看看这对汽车的路径有何影响道路
    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多