MPAndroidChart - 基于值的不同颜色的LineChart

时间:2017-12-23 04:01:19

标签: android charts mpandroidchart linechart

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

enter image description here

据我所知,我设法得到以下内容。

enter image description here

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

2 个答案:

答案 0 :(得分:2)

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

}

答案 1 :(得分:0)

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