我目前有以下代码:
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 pathArrayX
和pathArrayY
中。我正在跟踪在鼠标下移动的圆形ImageView的X和Y坐标,并且当用户从头到尾悬停在路径上时,我希望用绿色路径覆盖红色路径。当用户盘旋在红色路径上时,他们已经完成的红色路径的部分将被沿着相同段的绿色路径覆盖。 ImageView(curX
和curY
)的X和Y坐标是从正在运行的线程计算的。
但是,我的应用似乎根本没有绘制绿色路径。我在这里做错了吗?
答案 0 :(得分:3)
这个功能甚至被调用了吗?
假设它在onDraw(Canvas)中调用,看起来它可能缺少循环的外部代码。看到你最后在做pathIndex++
,你是否正在使用while循环?如果你只是要循环遍历点,那么使用for循环,因为如果忘记增加计数器或做错误,或者在多个地方进行循环,while循环更容易陷入无限循环。
附注:如果布尔start
标志仅用于懒惰地初始化greenPath
,则应该废弃它并仅使用if (greenPath == null){
作为一般做法。使用您可以直接从对象推断的状态,如果可以帮助它,则不使用标志,这使代码更清晰。