重置Android中的路径不起作用

时间:2015-03-11 00:08:24

标签: java android traveling-salesman

我目前正在开发一种游戏,其中计算机根据旅行商问题算法沿着arraylist中的点创建路径。每次迭代我都需要重置前一个路径。目前,迭代生成的每个新路径都是在前一个路径上绘制的,所以它看起来都非常混乱。根据android文档,函数path.reset()似乎不能正常工作。这是我的代码,任何人都可以指出我出错的地方吗?

//this class draws a line 
public void CompDrawLine(List test) {
    // int d = 0; 
    int i=0;
    test.add(test.get(0));
    Point c = test.get(i);

    for (i=0;i<(test.size()-1);i++) {
        cPath.moveTo(c.x,c.y);
        c = test.get(i+1);
        cPath.lineTo(c.x,c.y);
        mCanvas.drawPath(cPath,cPaint); 

        cPath.reset(); 
    } 

    // cPath.reset(); 
    invalidate(); 
}

1 个答案:

答案 0 :(得分:0)

在循环中调用moveTo时,其效果与调用reset()相同。 moveTo()设置下一个轮廓的开始,但实际上你只需绘制一个轮廓。我改变了你的代码,你可以看到差异:

        int i=0;
        test.add(test.get(0));
        Point c = test.get(i);
        path.moveTo(c.x,c.y); // move this line out of the loop
        for (i=0;i<(test.size()-1);i++) {

            c = test.get(i+1);
            path.lineTo(c.x,c.y);
            canvas.drawPath(path,paint); 

//          path.reset(); // comment out reset()
        } 

enter image description here

        int i=0;
        test.add(test.get(0));
        Point c = test.get(i);
        path.moveTo(c.x,c.y);
        for (i=0;i<(test.size()-1);i++) {

            c = test.get(i+1);
            path.lineTo(c.x,c.y);
            canvas.drawPath(path,paint); 

            path.reset(); // uncomment reset()
        } 

enter image description here