Android 使用PathMeasure.getMatrix()时,如何在0,0以外的点上旋转矩阵

Android 使用PathMeasure.getMatrix()时,如何在0,0以外的点上旋转矩阵,android,matrix,path,rotation,Android,Matrix,Path,Rotation,我正在沿着画布上的路径移动位图。路径具有各种曲线,位图将沿着这些曲线显示。当pm.getMatrix通过PathMeasure.position_MATRIX_标志和TANGENT_MATRIX_标志时,它在处理沿路径的位置和旋转调整方面做得非常出色,但是,它会旋转以0,0坐标为轴的位图。我需要它在位图的中心旋转 我在调试器中打开了矩阵,看起来确实没有勺子。但是,有3个浮点数数组,每个数组包含3个浮点数。我猜如果我能得到这些值,我可能就能找出它们中哪一个描述了物体的旋转,也许有办法改变轴心点?我

我正在沿着画布上的路径移动位图。路径具有各种曲线,位图将沿着这些曲线显示。当pm.getMatrix通过PathMeasure.position_MATRIX_标志和TANGENT_MATRIX_标志时,它在处理沿路径的位置和旋转调整方面做得非常出色,但是,它会旋转以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);
试试这个:

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);
驾驶愉快…

试试这个:

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/2的宽度和-1/2的高度上移动汽车会使它在其中心旋转?如果你没有得到它,不要担心,(医生帮不了多少忙…)这对我来说仍然是一种黑魔法,但是阅读这篇文章可能会有所帮助…顺便说一句,看看你使用后翻译和前翻译的区别有趣。。。实际上我对那个链接的内容很熟悉。这个特殊的翻译更为神秘,因为我无法了解pm.getMatrix()的实际功能。然而,我怀疑它之所以能工作,是因为预平移会影响最初的值,所以,本质上,它会将汽车在两个轴上移动1/2,然后旋转仍然*认为它在旋转0,0坐标,只是现在汽车的中心在该坐标上。(至少这是我的猜测。)我无法更好地解释:)很遗憾,docs在这方面太差了。最好的办法就是调用pre/pist Teanslate/Scale/Rotate,看看与完全工作的道路相比,这对汽车的路径有何影响。。。谢谢如果你有时间解释一下它到底在做什么,我会非常感激。。。为什么在-1/2的宽度和-1/2的高度上移动汽车会使它在其中心旋转?如果你没有得到它,不要担心,(医生帮不了多少忙…)这对我来说仍然是一种黑魔法,但是阅读这篇文章可能会有所帮助…顺便说一句,看看你使用后翻译和前翻译的区别有趣。。。实际上我对那个链接的内容很熟悉。这个特殊的翻译更为神秘,因为我无法了解pm.getMatrix()的实际功能。然而,我怀疑它之所以能工作,是因为预平移会影响最初的值,所以,本质上,它会将汽车在两个轴上移动1/2,然后旋转仍然*认为它在旋转0,0坐标,只是现在汽车的中心在该坐标上。(至少这是我的猜测。)我无法更好地解释:)很遗憾,docs在这方面太差了。最好的办法就是调用pre/pist Teanslate/Scale/Rotate,看看与道路相比,这会对汽车的路径产生什么影响