Color del gradiente para el gráfico de línea dentro de AchartEngine

Estoy utilizando AchartEngine para dibujar un gráfico de línea.

Lo que he hecho: Quiero hacer el LineGraph con el uso del motor Achart. Pero con diferentes colores gradiente habilitado como lo hacemos en Barchart.

Tengo hacer el gráfico de línea sin preocupaciones.

Sé que Gradient sólo es compatible con el gráfico de barras de rango en Achart Engine. Pero aunque debería haber alguna solución para esto si alguien tiene.

Tengo que hacer mi código es como abajo:

public GraphicalView graph(Context context) { String[] titles = new String[] { "Nike Line Graph" }; List<double[]> values = new ArrayList<double[]>(); values.add(new double[] { 14230, 12300, 14240, 15244, 14900, 12200, 11030, 12000, 12500, 15500, 14600, 15000 }); int length = values.get(0).length; Log.d("****length*********", "" + length); int[] colors = new int[] { Color.GREEN }; PointStyle[] styles = new PointStyle[] { PointStyle.POINT }; XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); setChartSettings(renderer, "Monthly sales in the last 2 years", "Month", "Units sold", 0.75, 12.25, 10000, 19000, Color.argb(0x00, 0x01, 0x01, 0x01), Color.argb(0x00, 0x01, 0x01, 0x01)); renderer.setChartTitleTextSize(20); renderer.setTextTypeface("sans_serif", Typeface.BOLD); renderer.setLabelsTextSize(0f); renderer.setLabelsColor(Color.argb(0x00, 0x01, 0x01, 0x01)); renderer.setAxisTitleTextSize(15); renderer.setApplyBackgroundColor(true); renderer.setBackgroundColor(Color.argb(0x00, 0x01, 0x01, 0x01)); renderer.setLegendTextSize(15); renderer.setScale(10); renderer.setShowAxes(false); renderer.setXLabelsColor(Color.argb(0x00, 0x01, 0x01, 0x01)); renderer.setYLabelsColor(0, Color.argb(0x00, 0x01, 0x01, 0x01)); renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01)); renderer.setPanEnabled(false, false); renderer.setZoomEnabled(false, false); length = renderer.getSeriesRendererCount(); SimpleSeriesRenderer r1 = new SimpleSeriesRenderer(); r1.setGradientEnabled(true); r1.setGradientStart(-50, Color.BLACK); r1.setGradientStop(50, Color.GREEN); Log.d("****length*********", "" + length); for (int i = 0; i < length; i++) { XYSeriesRenderer r = (XYSeriesRenderer) renderer .getSeriesRendererAt(i); r.setLineWidth(5f); } GraphicalView v = ChartFactory.getCubeLineChartView(context, buildBarDataset(titles, values), renderer, 0.5f); return v; } 

Con el método:

 protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); setRenderer(renderer, colors, styles); return renderer; } protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) { renderer.setAxisTitleTextSize(16); renderer.setChartTitleTextSize(20); renderer.setLabelsTextSize(15); renderer.setLegendTextSize(15); renderer.setPointSize(5f); renderer.setMargins(new int[] { 20, 30, 15, 20 }); int length = colors.length; for (int i = 0; i < length; i++) { XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(colors[i]); r.setPointStyle(styles[i]); renderer.addSeriesRenderer(r); } 

Lo que estoy obteniendo esto es ScreenShot como abajo:

Introduzca aquí la descripción de la imagen

Lo que quiero :

Introduzca aquí la descripción de la imagen

Pregunta: Quiero agregar colores de degradado a este gráfico de líneas. De un color a otro.

Cualquier ayuda sería muy apreciada.

Gracias de antemano.

2 Solutions collect form web for “Color del gradiente para el gráfico de línea dentro de AchartEngine”

Utilice varias series, cada serie teniendo su propio color.

Si usted todavía está buscando la respuesta y cualquier uno encuentra esta pregunta iguales, así que la respuesta es sí podemos fijar gradiente a la carta de la línea. La solución era subclasificar LineChart y anular el método drawSeries igual que el siguiente

  @Override public void drawSeries(Canvas canvas, Paint paint, float[] points, SimpleSeriesRenderer seriesRenderer, float yAxisValue, int seriesIndex, int startIndex) { int length = points.length; XYSeriesRenderer renderer = (XYSeriesRenderer) seriesRenderer; float lineWidth = paint.getStrokeWidth(); paint.setStrokeWidth(renderer.getLineWidth()); if (renderer.isFillBelowLine() || renderer.isGradientEnabled()) { int pLength = points.length; float[] fillPoints = new float[pLength + 4]; System.arraycopy(points, 0, fillPoints, 0, length); fillPoints[0] = points[0] + 1; fillPoints[length] = fillPoints[length - 2]; fillPoints[length + 1] = yAxisValue; fillPoints[length + 2] = fillPoints[0]; fillPoints[length + 3] = fillPoints[length + 1]; float max = 0; for (int i = 0; i < length + 4; i += 2) { if (fillPoints[i + 1] < 0) { fillPoints[i + 1] = 0; } else if (fillPoints[i + 1] > max) { max = fillPoints[i + 1]; } } paint.setStyle(Style.FILL); if (renderer.isGradientEnabled()) { Shader s = paint.getShader(); // Create gradient from values set in renderer paint.setShader(new LinearGradient(0, (float)(renderer.getGradientStartValue() * max), 0, (float)(renderer.getGradientStopValue() * max), renderer.getGradientStartColor(), renderer.getGradientStopColor(), Shader.TileMode.MIRROR)); drawPath(canvas, fillPoints, paint, true); // Restore paint's shader to previous value (null) paint.setShader(s); } else { paint.setColor(renderer.getFillBelowLineColor()); drawPath(canvas, fillPoints, paint, true); } } paint.setColor(seriesRenderer.getColor()); paint.setStyle(Style.STROKE); drawPath(canvas, points, paint, false); paint.setStrokeWidth(lineWidth); } 

Si desea buscar usando datos de pasta cruda, use el siguiente código:

 @Override public void drawSeries(Canvas canvas, Paint paint, float[] points, SimpleSeriesRenderer seriesRenderer, float yAxisValue, int seriesIndex, int startIndex) { int length = points.length; XYSeriesRenderer renderer = (XYSeriesRenderer) seriesRenderer; float lineWidth = paint.getStrokeWidth(); paint.setStrokeWidth(renderer.getLineWidth()); if (renderer.isFillBelowLine() || renderer.isGradientEnabled()) { int pLength = points.length; float[] fillPoints = new float[pLength + 4]; System.arraycopy(points, 0, fillPoints, 0, length); fillPoints[0] = points[0] + 1; fillPoints[length] = fillPoints[length - 2]; fillPoints[length + 1] = yAxisValue; fillPoints[length + 2] = fillPoints[0]; fillPoints[length + 3] = fillPoints[length + 1]; float max = 0; for (int i = 0; i < length + 4; i += 2) { if (fillPoints[i + 1] < 0) { fillPoints[i + 1] = 0; } else if (fillPoints[i + 1] > max) { max = fillPoints[i + 1]; } } paint.setStyle(Style.FILL); if (renderer.isGradientEnabled()) { Shader s = paint.getShader(); // Create gradient from values set in renderer paint.setShader(new LinearGradient(0, (float)(renderer.getGradientStartValue() * max), 0, (float)(renderer.getGradientStopValue() * max), renderer.getGradientStartColor(), renderer.getGradientStopColor(), Shader.TileMode.MIRROR)); drawPath(canvas, fillPoints, paint, true); // Restore paint's shader to previous value (null) paint.setShader(s); } else { paint.setColor(renderer.getFillBelowLineColor()); drawPath(canvas, fillPoints, paint, true); } } paint.setColor(seriesRenderer.getColor()); paint.setStyle(Style.STROKE); drawPath(canvas, points, paint, false); paint.setStrokeWidth(lineWidth); } 

Si su ayuda me hace saber. O ya lo has resuelto, entonces déjame saber cómo hiciste esto.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.