我正在为我们的一个应用程序构建折线图.图表中的线部分工作正常,但现在我必须用颜色填充线下方的区域,如下图所示.
我正在使用此代码使用画布将线条绘制到位图上.
List<Float> xCoordinates = (List<Float>) coordinates[0]; List<Float> yCoordinates = (List<Float>) coordinates[1]; for (int i = 0; i < xCoordinates.size(); i++) { if (!firstSet) { x = xCoordinates.get(i); y = yCoordinates.get(i); p.moveto(x,y); firstSet = true; } else { x = xCoordinates.get(i); y = yCoordinates.get(i); p.lineto(x,y); } } textureCanvas.drawPath(p,pG);
我需要知道的是,有没有办法轻松找到线下面的区域并使其成为一种颜色,或者我必须计算图形的3个点之间的每个区域并用颜色填充它?
我不能使用现有的图表库,如AchartEngine,ChartDroid,aFreeChart等.
解决方法
找到了解决方案
我首先绘制了渐变,之后我绘制了折线图,并通过在折线后面创建另一条路径并在最后将其关闭来擦除整条线.之后,我将区域涂成透明的,以擦除渐变的顶部.
List<Float> xCoordinates = coordinates.first; List<Float> yCoordinates = coordinates.second; for (int i = 0; i < xCoordinates.size(); i++) { if (!firstSet) { x = xCoordinates.get(i); y = yCoordinates.get(i); linePath.moveto(x,y); erasePath.moveto(x,0); erasePath.lineto(x,y); firstSet = true; } else { x = xCoordinates.get(i); y = yCoordinates.get(i); linePath.lineto(x,y); erasePath.lineto(x,y); } } erasePath.lineto(getWidth(),y); erasePath.lineto(getWidth(),0); erasePath.lineto(0,0); getTextureCanvas().drawPath(erasePath,clear); getTextureCanvas().drawPath(linePath,pG);
结果看起来像这样
另一种方法是精确地跟踪路径并剪切底部边缘,然后在第二条路径内绘制渐变.这将得到相同的结果,但图表上方的所有内容都将保留,并且不会删除任何内容.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。