Question

I'm trying to drag a path around my canvas by re-plotting the coordinates, stored in an array of point, then re creating it. The path drags but flips horizontally and vertically, like a mirror image, over where the user clicks. I have no idea why.

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);
}

Any help will be appreciated, thanks

Was it helpful?

Solution

In my opinion there is a problem in these lines:

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

Consider two points A(1,5) and B(4,5). If user clicks in C(3,6), then point A will be translated to A'(5, 7) and point B to B'(2, 7). As you can see, points A and B will change places.

You might want to store start drag position and calculate distance and updated path position using this information.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top