2013-03-13 41 views
5

Tôi đang sử dụng AchartEngine để vẽ biểu đồ đường kẻ.màu gradient cho Biểu đồ đường bên trong AchartEngine

Điều tôi đã làm: Tôi muốn tạo biểu đồ đường thẳng bằng cách sử dụng công cụ Achart. Nhưng với màu sắc khác nhau Gradient kích hoạt như chúng ta làm trong Barchart.

Tôi có biểu đồ Đường kẻ không có lo lắng.

Tôi biết Gradient chỉ được hỗ trợ bởi biểu đồ thanh phạm vi trong Công cụ Achart. Nhưng mặc dù phải có một số Workaround cho điều này nếu có ai có.

Tôi có làm luật của tôi là như sau:

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; 

    } 

Với Có Phương pháp:

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

     } 

Những gì tôi Bắt đây là ảnh chụp màn hình như sau:

enter image description here

Điều tôi muốn:

enter image description here

Câu hỏi: Tôi muốn Thêm màu Gradient để Biểu đồ dạng đường này. từ màu này sang màu khác.

Bất kỳ trợ giúp nào sẽ được đánh giá cao.

Cảm ơn trước.

+1

Xin chào, bạn có tìm thấy câu trả lời của mình không? Tôi đang tìm kiếm như vậy. –

+0

allready đã được giải quyết? Đây là những gì tôi cần quá. – acntwww

Trả lời

0

Sử dụng một vài chuỗi, mỗi chuỗi có màu riêng.

0

Nếu bạn vẫn đang tìm kiếm câu trả lời & bất kỳ ai cũng tìm thấy câu hỏi này, vì vậy, câu trả lời là có, chúng tôi có thể đặt tô chuyển thành biểu đồ dạng đường. Giải pháp là để phân lớp Biểu đồ dạng đường và ghi đè lên drawSeries cùng một phương pháp như sau

@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); 
    } 

Nếu bạn muốn tìm kiếm sử dụng liệu dán sử dụng dữ liệu sau mã:

@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); 
} 

Nếu sự giúp đỡ của bạn cho tôi biết. HOẶC bạn đã giải quyết xong rồi cho tôi biết bạn đã làm thế nào.

Các vấn đề liên quan