
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坐标是从正在运行的线程计算的.
但是,我的应用程序似乎根本没有绘制绿色路径.我在这里做错了吗?
解决方法 这个功能甚至被调用了吗?假设它在onDraw(Canvas)中被调用,看起来它可能缺少循环的外部代码.看到你最后在做pathIndex,你使用的是while循环吗?如果你只是要循环遍历点,那么使用for循环,因为如果忘记增加计数器或做错误,或者在多个地方执行,while循环更容易陷入无限循环.
附注:如果布尔开始标志仅用于懒惰地初始化greenPath,则应该废弃它并使用if(greenPath == null){作为一般做法.使用可以直接从对象推断的状态,如果可以帮助它,则不使用标志,这使代码更清晰.
总结以上是内存溢出为你收集整理的Android – 如何将一条路径叠加在另一条路径之上全部内容,希望文章能够帮你解决Android – 如何将一条路径叠加在另一条路径之上所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)