0

我试图通过重新绘制坐标来拖动画布周围的路径,存储在点数组中,然后重新创建它。路径在用户单击的位置上拖动但水平和垂直翻转,就像镜像一样。我不知道为什么。

private void drag(MotionEvent e) {
    // TODO correct weird flip

    if (clicked(e)) {
        for (Point p : points) {
            int modX = (int) (e.getX() + (e.getX() - p.x));
            int modY = (int) (e.getY() + (e.getY() - p.y));
            p.set(modX, modY);
        }
        updateOutline();
    }
}

private void updateOutline() {
    // update the outline
    outline = new Path();
    outline.moveTo(points.get(0).x, points.get(0).y);

    for (Point coor : points)
        outline.lineTo(coor.x, coor.y);
}

任何帮助将不胜感激,谢谢

4

1 回答 1

1

在我看来,这几行存在问题:

int modX = (int) (e.getX() + (e.getX() - p.x));
int modY = (int) (e.getY() + (e.getY() - p.y));

考虑两点 A(1,5) 和 B(4,5)。如果用户在 C(3,6) 中单击,则点 A 将转换为 A'(5, 7),点 B 将转换为 B'(2, 7)。如您所见,A 点和 B 点会改变位置。

您可能希望存储开始拖动位置并使用此信息计算距离和更新的路径位置。

于 2013-07-10T17:14:54.120 回答