Android - 如何将一条路径叠加在另一条路径之上

时间:2015-09-11 21:46:44

标签: android android-canvas android-view

我目前有以下代码:

private void drawGreen(Canvas canvas) {


    greenPaint.setColor(0xFF00AA00);

    if (start) {
        greenPath = new Path();
        greenPath.reset();
        greenPath.moveTo(pathArrayX.get(0), pathArrayY.get(0));
        start = false;
    }

    if (isInsideCircle(pathArrayX.get(pathIndex), pathArrayY.get(pathIndex), curX, curY, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 25, getResources().getDisplayMetrics()))) {
        greenPath.lineTo(pathArrayX.get(pathIndex), pathArrayY.get(pathIndex));
        canvas.drawPath(greenPath, greenPaint);
        pathIndex++;

    }


}

private boolean isInsideCircle(float x, float y, float centerX, float centerY, float radius) {
    return Math.pow(x - centerX, 2) + Math.pow(y - centerY, 2) < Math.pow(radius, 2);
}

在我的应用中,我首先绘制一条红色路径,其坐标存储在ArrayLists pathArrayXpathArrayY中。我正在跟踪在鼠标下移动的圆形ImageView的X和Y坐标,并且当用户从头到尾悬停在路径上时,我希望用绿色路径覆盖红色路径。当用户盘旋在红色路径上时,他们已经完成的红色路径的部分将被沿着相同段的绿色路径覆盖。 ImageView(curXcurY)的X和Y坐标是从正在运行的线程计算的。

但是,我的应用似乎根本没有绘制绿色路径。我在这里做错了吗?

1 个答案:

答案 0 :(得分:3)

这个功能甚至被调用了吗?

假设它在onDraw(Canvas)中调用,看起来它可能缺少循环的外部代码。看到你最后在做pathIndex++,你是否正在使用while循环?如果你只是要循环遍历点,那么使用for循环,因为如果忘记增加计数器或做错误,或者在多个地方进行循环,while循环更容易陷入无限循环。

附注:如果布尔start标志仅用于懒惰地初始化greenPath,则应该废弃它并仅使用if (greenPath == null){作为一般做法。使用您可以直接从对象推断的状态,如果可以帮助它,则不使用标志,这使代码更清晰。