【问题标题】: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));