2011-03-23 101 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); 
相关问题