【问题标题】:Draw multiple paths following to user touch根据用户触摸绘制多条路径
【发布时间】:2012-11-25 20:03:49
【问题描述】:

所以,我正在试验跟随用户手指触摸的“绘画”路径。我首先提到了this tutorial,它有效,但有一个明显的问题是它无法连接触摸点。所以,我发现this question 直接提到了相同的教程和问题。我在处理三次样条的部分使用了 johncarl 的解决方案,发现它非常有用。但是,我注意到,当您将手指从屏幕上移开 (ACTION_UP) 然后再将其放回原位 (ACTION_DOWN) 时,它会将最后一个点连接到这个新点并稍微改变路径。

现在,我的问题是,一旦用户移开手指并将其放回屏幕上,您将如何开始新路径?我的意思是新点不会连接到最后一个点。

我已经尝试了一些东西,我最新的尝试是这样的:

    else if (event.getAction() == MotionEvent.ACTION_UP){
        for (int i = 0; i <= points.size() - 1; i++){
            points.remove(i);
        }
    } 

以上代码是 onTouch() 方法中 if 语句的附加代码。不过,这似乎并没有多大作用。如果您能提供任何帮助,将不胜感激,谢谢!

【问题讨论】:

    标签: java android layout draw touch-event


    【解决方案1】:

    经过一段时间的反复试验,我发现了如何开始一条“新”路径。事实上,我可以使用相同的路径。我放在问题中的代码只会删除 arraylist 中的所有值(我认为这是开始新路径的第一步)。虽然,出于某种原因,它甚至没有这样做。然而,我发现确实有效,只是使用 clear() 方法,如下所示:

    points.clear();
    

    不过,正如我发现的那样,这并不能解决我的问题。它只删除先前绘制的路径。我需要做的是使用 moveTo() 方法,该方法将允许路径中断,创建看起来好像有多个路径。因此,每次我将手指从屏幕上移开 (ACTION_UP) 时,我都会将“points”数组列表的大小作为一个值添加到另一个数组列表中:

    startValues.add(points.size());
    

    这将为我提供调用 moveTo() 方法的索引值。现在,在 onDraw() 方法中,我添加了以下代码(查看问题中的链接以查看我使用的所有代码):

        boolean first = true;
        for(int i = 0; i < points.size(); i++){
            Point point = points.get(i);
    
            for (int index = 0; index <= startValues.size() - 1; index++){
                if (i == startValues.get(index)){
                    lineChange = true;
                    endNumber = (startValues.get(index) - 1);
                    break;
                }
            }
    
            if(first || lineChange){
                first = false;
                lineChange = false;
                path.moveTo(point.x, point.y);
            }else{
                Point prev = points.get(i - 1);
                path.cubicTo(prev.x + prev.dx, prev.y + prev.dy, point.x - point.dx, point.y - point.dy, point.x, point.y);
            }
    
        }
    
        canvas.drawPath(path, paint);
    

    这样,在第一个点之前的路径中以及从我从屏幕上抬起手指直到我再次放下手指的每个点上都会出现中断。这解决了我在问这个问题时遇到的最初问题,但它导致了其他一些问题。例如,当我的手指在屏幕上更换时,一条线的起点和终点会发生变化。如果我自己找不到解决方案,我会在另一个问题中问这个问题。我希望这对遇到类似问题的人有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      相关资源
      最近更新 更多