MpAndroidChart-如何在CombinedChart的两行之间填充区域?

禁止地球工程

这个类似问题的答案显示了如何在MpAndroidChart LineChart的两行之间填充区域

但是,不是使用LineChart,而是使用CombinedChart(因为我还有要显示的条形数据)。但是将以上解决方案应用于CombinedChart会导致以下异常:

java.lang.ClassCastException:org.example.MyLineLegendRenderer无法转换为com.github.mikephil.charting.charts.CombinedChart.setData(CombinedChart.java:96)上的com.github.mikephil.charting.renderer.CombinedChartRenderer

因此,我查看了CombinedChartRenderer,但是(与LineChartRenderer不同),它似乎不包含任何填充功能。

那么,如何在CombinedChart的两行之间填充空格?

索维克

您可以重写该类中createRenderers()方法CombinedChartRenderer这样,您就可以为自己的每种图形使用自己的渲染器CombinedChart

将会是这样的:

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));
                        }
                }
            }    
        }
    }
}

在上面的代码中,switch当块case LINE:遇到,我们有我们自己的版本替换默认渲染器:MyLineChartRenderer

最后,在您的活动代码中,可以将此渲染器与CombinedChart结合使用:

CombinedChart combinedChart = (CombinedChart) findViewById(R.id.barChart);
combinedChart.setRenderer(new MyCombinedChartRenderer(combinedChart, combinedChart.getAnimator(), combinedChart.getViewPortHandler()));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章