Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 拖动路径_Android_Path_Touch_Android Canvas_Motionevent - Fatal编程技术网

Android 拖动路径

Android 拖动路径,android,path,touch,android-canvas,motionevent,Android,Path,Touch,Android Canvas,Motionevent,我试图通过重新绘制存储在点数组中的坐标,然后重新创建它,在画布上拖动一条路径。路径会拖动,但会水平和垂直翻转,就像用户单击的镜像一样。我不知道为什么 private void drag(MotionEvent e) { // TODO correct weird flip if (clicked(e)) { for (Point p : points) { int modX = (int) (e.getX() + (e.getX() -

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

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

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

在我看来,这些方面存在一个问题:

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将改变位置

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