Java AchartEngine内部折线图的渐变色
我正在使用AchartEngine绘制折线图 我所做的:我想使用Achart引擎制作线条图。但启用了不同的颜色渐变,就像我们在条形图中所做的一样 我已经毫无顾虑地画出了折线图 我知道渐变只受Achart引擎中的范围条形图支持。但是,如果有人有,应该有一些解决办法 我所做的代码如下:Java AchartEngine内部折线图的渐变色,java,android,achartengine,linechart,Java,Android,Achartengine,Linechart,我正在使用AchartEngine绘制折线图 我所做的:我想使用Achart引擎制作线条图。但启用了不同的颜色渐变,就像我们在条形图中所做的一样 我已经毫无顾虑地画出了折线图 我知道渐变只受Achart引擎中的范围条形图支持。但是,如果有人有,应该有一些解决办法 我所做的代码如下: public GraphicalView graph(Context context) { String[] titles = new String[] { "Nike Line Graph" };
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;
}
公共图形视图图形(上下文){
字符串[]标题=新字符串[]{“Nike Line Graph”};
列表值=新的ArrayList();
添加(新的双[]值{14230、12300、14240、15244、14900、12200、,
11030, 12000, 12500, 15500, 14600, 15000 });
int length=values.get(0).length;
Log.d(“****长度*******”,“+长度”);
int[]colors=newint[]{Color.GREEN};
PointStyle[]styles=新的PointStyle[]{PointStyle.POINT};
XYMultipleReseriesRenderer渲染器=构建渲染器(颜色、样式);
setChartSettings(渲染器,“过去2年的月销售额”,
“月”、“售出单位”、0.75、12.25、10000、19000、,
颜色.argb(0x00,0x01,0x01,0x01),
argb(0x00,0x01,0x01,0x01));
渲染器.setChartTitleTextSize(20);
renderer.setTextTypeface(“sans_serif”,Typeface.BOLD);
渲染器。setLabelsTextSize(0f);
setLabelsColor(Color.argb(0x00,0x01,0x01,0x01));
setAxisTitleTextSize(15);
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.argb(0x00、0x01、0x01、0x01));
渲染器。setLegendTextSize(15);
设置刻度(10);
渲染器。设置显示轴(false);
setXLabelsColor(Color.argb(0x00,0x01,0x01,0x01));
renderer.setYLabelsColor(0,Color.argb(0x00,0x01,0x01,0x01));
setMarginsColor(Color.argb(0x00,0x01,0x01,0x01));
renderer.setPanEnabled(false,false);
renderer.setZoomeEnabled(false,false);
长度=renderer.getSeriesRenderCount();
SimpleSriesRender r1=新的SimpleSriesRender();
r1.setGradientEnabled(真);
r1.setGradientStart(-50,颜色为黑色);
r1.设置梯度停止(50,颜色为绿色);
Log.d(“****长度*******”,“+长度”);
for(int i=0;i
使用以下方法:
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);
}
受保护的XYMultipleSeries渲染器构建渲染器(int[]颜色,
点样式[]样式){
XYMultipleReseriesRenderer渲染器=新的XYMultipleReseriesRenderer();
设置渲染器(渲染器、颜色、样式);
返回渲染器;
}
受保护的void setRenderer(XYMultipleSeriesRenderer渲染器,int[]颜色,
点样式[]样式){
setAxisTitleTextSize(16);
渲染器.setChartTitleTextSize(20);
setLabelsTextSize(15);
渲染器。setLegendTextSize(15);
渲染器设置点大小(5f);
setMargins(新的int[]{20,30,15,20});
int length=colors.length;
for(int i=0;i
我得到的截图如下:
我想要什么:
问题:我想给这个折线图添加渐变色。从一种颜色到另一种颜色
任何帮助都将不胜感激
提前感谢。使用几个系列,每个系列都有自己的颜色。如果您仍在寻找答案&任何一个都发现这个问题相同,那么 答案是肯定的,我们可以将梯度设置为折线图。 解决方案是将LineChart子类化并覆盖drawSeries方法,如下所示
@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);
}
@覆盖
public void drawSeries(帆布、油漆、浮点数、,
SimpleSeriesRenderer seriesRenderer、浮点值、整数系列索引、整数startIndex){
int length=points.length;
XYSeriesRenderer渲染器=(XYSeriesRenderer)seriesRenderer;
float lineWidth=paint.getStrokeWidth();
paint.setStrokeWidth(renderer.getLineWidth());
if(renderer.isFillBelowLine()| | renderer.isGradientEnabled()){
int pLength=点。长度;
浮动[]填充点=新浮动[pLength+4];
System.arraycopy(点,0,填充点,0,长度);
填充点[0]=点[0]+1;
填充点[长度]=填充点[长度-2];
填充点[length+1]=yAxisValue;
填充点[长度+2]=填充点[0];
填充点[长度+3]=填充点[长度+1];
浮动最大值=0;
对于(int i=0;i最大值){
最大值=填充点[i+1];
}
}
油漆.设置样式(样式.填充);
if(renderer.isGradientEnabled()){
着色器s=paint.getShader();
//从渲染器中设置的值创建渐变
油漆.固定阴影(新线性
@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);
}