【问题标题】:MPAndroidChart - LineChart with different colors based on valuesMPAndroidChart - 基于值具有不同颜色的 LineChart
【发布时间】:2017-12-23 04:01:19
【问题描述】:

我正在使用MPAndroidChart 库在我的应用程序中制作图表。我需要创建如下图表。我需要LineChart 上的渐变线,它的颜色必须基于值。例如红色代表高,黄色代表中等,绿色代表低。

根据我的尝试,我设法得到了以下结果。

我搜索了一天找到解决方案,但我找不到任何解决方案。因此,如果你们中的任何人知道如何解决此问题或对此有任何想法,请与我分享。谢谢。

【问题讨论】:

    标签: android charts mpandroidchart linechart


    【解决方案1】:

    codereview.stackexchange.com 的解决方案对我有用。

    protected void drawCubicBezier(ILineDataSet dataSet) {
    ...
    // Get screen coordinates for min Y value
    MPPointD pixelForValues = trans.getPixelForValues(0, minDy);
    minDy = (float) pixelForValues.y;
    MPPointD.recycleInstance(pixelForValues);
    
    // Get screen coordinates for max Y value
    pixelForValues = trans.getPixelForValues(0, maxDy);
    maxDy = (float) pixelForValues.y;
    MPPointD.recycleInstance(pixelForValues);
    
    // Get screen coordinates for 0 value
    pixelForValues = trans.getPixelForValues(0, 0);
    float zeroDy = (float) pixelForValues.y;
    MPPointD.recycleInstance(pixelForValues);
    
    float range = minDy - maxDy;
    float zeroPointNormalized = Math.max((zeroDy - maxDy) / range, 0);
    
    linearGradient = new LinearGradient(
            0, maxDy, 0, minDy,
            new int[]{Color.RED, Color.RED, Color.BLUE, Color.BLUE},
            new float[]{0, zeroPointNormalized, zeroPointNormalized, 1f},
            Shader.TileMode.REPEAT);
    paint.setShader(linearGradient);
    ...
    mBitmapCanvas.drawPath(cubicPath, paint);
    

    }

    【讨论】:

    • 从您调用此方法的位置。你能分享更多细节吗?
    【解决方案2】:

    试试William Chart并使用这个方法:

    int[] colors = { getResources().getColor(R.color.menu_text),
     getResources().getColor(android.R.color.white) };
    
    float[] index = { 0, 1 };
    dataset.setGradientFill(colors, index);
    

    编辑1:在MPChart,你可以使用

    Paint paint = mChart.getRenderer().getPaintRender();
                paint.setShader(new LinearGradient(0, 0, 0, 40, Color.YELLOW, Color.RED, Shader.TileMode.REPEAT));
    

    【讨论】:

    • 会试一试。谢谢。
    • 它只填充线下的区域。我需要这条线是渐变的。
    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多