我正在使用MPAndroidChart库在我的应用中制作图表。我需要创建如下图表。我需要LineChart
上的渐变线,它的颜色必须基于值。例如,红色表示高,黄色表示中等,绿色表示低。
据我所知,我设法得到以下内容。
我搜索了一天找到解决方案,但我找不到任何解决方案。所以,如果你们中的任何人知道如何解决这个问题或对此有任何想法,请与我分享。感谢。
答案 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));