Android - 填充折线图下方的颜色

标签 android canvas charts bitmap paint

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

enter image description here

我正在使用此代码使用 Canvas 将线绘制到位图上。

    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 个点之间的每个区域并用颜色填充?

我不能使用现有的图表库,如 AchartEngineChartDroidaFreeChart 等。

最佳答案

找到解决方案

我首先画了渐变,然后画了折线图,然后通过创建另一条跟随折线图的路径并在最后将其关闭来沿着线删除所有内容。之后,我将该区域涂成透明以删除渐变的顶部。

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

结果是这样的

enter image description here

另一种方法是完全遵循路径并围绕底部边缘进行裁剪,然后仅在第二条路径内绘制渐变。这将产生相同的结果,但图表上方的所有内容都将保留,不会删除任何内容。

关于Android - 填充折线图下方的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16140546/

相关文章:

Android:AnimateDrawable 无法解析为类型?

android - 如何在 Android 7.1 上正确创建静态应用程序快捷方式?

canvas - FabricJS 缩放图像以适应宽度/大小

javascript - Google 条形图 - 如何使用 JSON 为每个条目获取 2 个不同的条形图

java - 绘制背景(棋盘)java android

android - 在 Flutter 中更新 MaterialPageRoute 的状态

javascript - 倒计时一天,每天更新?

android - 如何使用 Canvas 设置仅绘制图像形状

javascript - Highcharts xrange 图表不考虑日期时间 xAxis 最小值和最大值 - 显示两侧的空间

c# - Wpf 中的标记列系列图表