Android – 在折线图下方填充颜色

我正在为我们的一个应用程序构建折线图.图表中的线部分工作正常,但现在我必须用颜色填充线下方的区域,如下图所示.

我正在使用此代码使用画布将线条绘制到位图上.

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);

结果看起来像这样

另一种方法是精确地跟踪路径并剪切底部边缘,然后在第二条路径内绘制渐变.这将得到相同的结果,但图表上方的所有内容都将保留,并且不会删除任何内容.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...