2011-03-23 105 views
12

我想繪製一個包含五個單獨條形的條形圖 - 我已經使用Achartengine。 我能夠以相同的顏色顯示所有五個酒吧,但我想區分不同顏色的酒吧,但我不能顯示多種顏色。請告訴我如何顯示不同的顏色。 我的代碼...使用achartengine的條形圖

  values.add(new double[] {21,56,33,10,20});   
     int[] colors = new int[] { Color.rgb(227, 121, 15) }; 
     XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); 
     setChartSettings(renderer, "", "", "", 0,5, 0,100, Color.WHITE, Color.WHITE); 
     renderer.setXLabels(8); 
     renderer.setYLabels(10); 
     renderer.setDisplayChartValues(true); 
     mChartView= ChartFactory.getBarChartView(context, buildBarDataset(titles, values), renderer, 
      Type.DEFAULT); 
     layout.addView(mChartView, 350, 500); 
+0

沒有u得到解決這個如果是[回答這個問題(http://stackoverflow.com/q/15969486/1752560)其類似 – Kiran 2013-04-12 11:38:46

+0

@Kiran您是否使用了下面給出的解決方案?如果是的話,你可以分享下面提到的類的實施嗎? 。 – 2015-07-27 13:47:27

回答

6

可以通過擴展SimpleSeriesRenderer和BarChart類來實現。這裏是我的RangeBarChart溶液(一切都歸功於gilenodm,希望我有一些信譽給予好評您的答案):

import org.achartengine.renderer.SimpleSeriesRenderer; 
public class AdvancedSeriesRenderer extends SimpleSeriesRenderer 
{ 
    private int [] colors; 

    public void AdvancedSeriesRenderer() 
    { 
    } 

    public int getColor (int position) 
    { 
     return colors[position]; 
    } 
} 

import org.achartengine.chart.RangeBarChart; 
import org.achartengine.model.XYMultipleSeriesDataset; 
import org.achartengine.renderer.SimpleSeriesRenderer; 
import org.achartengine.renderer.XYMultipleSeriesRenderer; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Paint.Style; 

public class AdvancedRangeBarChart extends RangeBarChart 
{ 
    private int [] barChartColors; 

    public AdvancedRangeBarChart (XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, Type type) 
    { 
     super (dataset, renderer, type); 
    } 

    public void setColors (int [] colorsIn) 
    { 
     barChartColors = colorsIn; 
    } 

    @Override 
    public void drawSeries (Canvas canvas, Paint paint, float [] points, SimpleSeriesRenderer seriesRenderer, float yAxisValue, int seriesIndex, int startIndex) 
    { 
     int seriesNr = mDataset.getSeriesCount(); 
     int length = points.length; 
     paint.setStyle (Style.FILL); 
     float halfDiffX = getHalfDiffX (points, length, seriesNr); 
     int start = 0; 
     if (startIndex > 0) 
     { 
      start = 2; 
     } 
     for (int i = start; i < length; i += 4) 
     { 
      int colorIndex = (int) (i/4) % barChartColors.length; 
      paint.setColor (barChartColors[colorIndex]); 
      if (points.length > i + 3) 
      { 
       float xMin = points[i]; 
       float yMin = points[i + 1]; 
       // xMin = xMax 
       float xMax = points[i + 2]; 
       float yMax = points[i + 3]; 
       drawBar (canvas, xMin, yMin, xMax, yMax, halfDiffX, seriesNr, seriesIndex, paint); 
      } 
     } 
    } 
} 
+0

可以請你分享一個完整的例子。我不是在想你想要做什麼。 – 2013-07-11 09:19:54

+0

@Astron你能分享一下這個示例項目嗎?在使用MPAndroidChart嘗試之後,我一直困在我的項目中。現在我正在嘗試使用AChartEngine。如果您分享樣本,這將有所幫助。我正在與Bar Chart合作。 – 2015-07-23 09:11:55

+0

@Astron如何在片段或活動中使用此類? – 2015-07-23 10:05:46

2

這已經有一段時間,因爲我用achartengine,但我覺得每個系列都必須有自己的顏色。作爲一種解決方法,您可以製作您想要區分其系列成員的工具欄,併爲該系列設置不同的顏色。也許別人有更好的方法。

+0

你可以用一個例子來展示它嗎? – AndroidDev 2012-04-02 13:11:19

0

你必須使用不同的SimpleSeriesRendererbuildBarRenderer()調用,並定義爲許多意甲的所需數量的顏色,這種方式(取代的代碼的前兩行):

values.add(new double[] {21}); 
values.add(new double[] {56}); 
values.add(new double[] {33}); 
//ETC. 
int[] colors = new int[] { Color.rgb(227, 121, 15), 
          Color.rgb(227, 121, 227), 
          Color.rgb(127, 121, 127) }; 

其餘代碼應該和你的一樣,但我沒有測試過。 AFAIK 您需要不同的系列,因爲每個系列只能有一種顏色。

5

我做了一個黑客來達到這個效果。 Org.achartengine.SimpleSeriesRenderer改變了班級,我增加了一個int[] colors和一個boolean multipleColorsEnabled與其獲得者和setter。 所以,我改變,org.achartengine.BarChart類,該方法drawSeries,其中被設置在一個循環中每個條的顏色,如下所示:

int j = startIndex; 
for (int i = 0; i < length; i += 2) { 
    if (seriesRenderer.isMultipleColorsEnabled()) { 
     paint.setColor(seriesRenderer.getColors()[j++]); 
    } else { 
     paint.setColor(seriesRenderer.getColor()); 
    } 
    float x = points[i]; 
    float y = points[i + 1]; 
    drawBar(canvas, x, yAxisValue, x, y, halfDiffX, seriesNr, 
     seriesIndex, paint); 
} 

在加載所使用的數據的類:

seriesRenderer.setMultipleColorsEnabled(true); 
seriesRenderer.setColors(myColors); 
相關問題