我正在使用自定义 View (extends View)并正在使用onDraw方法。

我做了一条箭的路:

    ARROW_PATH = new Path();
    ARROW_PATH.setLastPoint(20, 37);
    ARROW_PATH.lineTo(14, 25);
    ARROW_PATH.lineTo(18, 26);
    ARROW_PATH.lineTo(17, 4);
    ARROW_PATH.lineTo(23, 4);
    ARROW_PATH.lineTo(22, 26);
    ARROW_PATH.lineTo(26, 25);
    ARROW_PATH.close();

在不同的场景中,需要旋转它以描绘特定角度,而我需要在 View 中的特定坐标处绘制它。坐标也会根据情况而变化。

我尝试过使用Canvas.rotate,但是,当pxpy值不相等时,路径的外观似乎偏斜(当py > px时,箭头变得越来越窄)。

我也尝试过Canvas.rotate(angle, 0, 0);ARROW_PATH.moveTo(x, y);,但看起来坐标旋转了任意角度,因此很难计算所需的坐标。

理想情况下,我想旋转路径而不是 Canvas ,但是我认为API不支持此操作。

有人可以提出解决此问题的更好方法吗?

谢谢,第

最佳答案

这是永久旋转路径的正确方法(它将一直保持这种状态,直到下一次应用矩阵时为止):

Matrix mMatrix = new Matrix();
RectF bounds = new RectF();
mPath.computeBounds(bounds, true);
mMatrix.postRotate(myAngle, bounds.centerX(), bounds.centerY());
mPath.transform(mMatrix);

10-08 11:57