MpAndroidChart-如何填充组合图表上两条线之间的区域?
这是一个类似的问题,显示了如何填充MpAndroidChart折线图上两条线之间的区域 但是,我使用的不是线形图,而是组合图(因为我还有条形图数据要显示)。但将上述解决方案应用于组合图表会导致此异常: java.lang.ClassCastException:org.example.MyLineLegenderer不能 被强制转换为com.github.mikephil.charting.renderer.CombinedChartRenderer 位于com.github.mikephil.charting.charts.CombinedChart.setData(CombinedChart.java:96) 所以我已经看过了,但是(不像),它似乎不包含任何填充功能MpAndroidChart-如何填充组合图表上两条线之间的区域?,android,mpandroidchart,Android,Mpandroidchart,这是一个类似的问题,显示了如何填充MpAndroidChart折线图上两条线之间的区域 但是,我使用的不是线形图,而是组合图(因为我还有条形图数据要显示)。但将上述解决方案应用于组合图表会导致此异常: java.lang.ClassCastException:org.example.MyLineLegenderer不能 被强制转换为com.github.mikephil.charting.renderer.CombinedChartRenderer 位于com.github.mikephil.c
那么,如何填充组合图表上两行之间的空间呢?您可以覆盖
CombinedChartRenderer
类中的createRenderers()
方法。这样,您就可以对在组合图表中使用的每种图形类型使用自己的渲染器
它将是这样的:
public class MyCombinedChartRenderer extends CombinedChartRenderer {
public MyCombinedChartRenderer(CombinedChart chart, ChartAnimator animator, ViewPortHandler viewPortHandler) {
super(chart, animator, viewPortHandler);
}
@Override
public void createRenderers() {
this.mRenderers.clear();
CombinedChart chart = (CombinedChart)this.mChart.get();
if (chart != null) {
CombinedChart.DrawOrder[] orders = chart.getDrawOrder();
CombinedChart.DrawOrder[] var3 = orders;
int var4 = orders.length;
for(int var5 = 0; var5 < var4; ++var5) {
CombinedChart.DrawOrder order = var3[var5];
switch(order) {
case BAR:
if (chart.getBarData() != null) {
this.mRenderers.add(new BarChartRenderer(chart, this.mAnimator, this.mViewPortHandler));
}
break;
case BUBBLE:
if (chart.getBubbleData() != null) {
this.mRenderers.add(new BubbleChartRenderer(chart, this.mAnimator, this.mViewPortHandler));
}
break;
case LINE:
if (chart.getLineData() != null) {
// replace with you own Line chart renderer
//this.mRenderers.add(new LineChartRenderer(chart, this.mAnimator, this.mViewPortHandler));
this.mRenderers.add(new MyLineChartRenderer(chart, this.mAnimator, this.mViewPortHandler));
}
break;
case CANDLE:
if (chart.getCandleData() != null) {
this.mRenderers.add(new CandleStickChartRenderer(chart, this.mAnimator, this.mViewPortHandler));
}
break;
case SCATTER:
if (chart.getScatterData() != null) {
this.mRenderers.add(new ScatterChartRenderer(chart, this.mAnimator, this.mViewPortHandler));
}
}
}
}
}
}
最后,要填充两条(水平贝塞尔)线之间的区域,请参见我对另一个SO问题的回答:
CombinedChart combinedChart = (CombinedChart) findViewById(R.id.barChart);
combinedChart.setRenderer(new MyCombinedChartRenderer(combinedChart, combinedChart.getAnimator(), combinedChart.getViewPortHandler()));