Ответ 1
Может быть достигнуто путем расширения классов 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 );
}
}
}
}