MpAndroidChart-如何在CombinedChart的两行之间填充区域? [英] MpAndroidChart - How to fill area between two lines on a CombinedChart?

查看:125
本文介绍了MpAndroidChart-如何在CombinedChart的两行之间填充区域?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对类似问题的答案显示了如何在MpAndroidChart LineChart .

This answer to a similar question shows how to fill the area between two lines on an MpAndroidChart LineChart.

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

However, rather than using LineChart, I am using CombinedChart (as I also have bar data to show). But applying the above solution to a CombinedChart results in this exception:

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

java.lang.ClassCastException: org.example.MyLineLegendRenderer cannot be cast to com.github.mikephil.charting.renderer.CombinedChartRenderer at com.github.mikephil.charting.charts.CombinedChart.setData(CombinedChart.java:96)

所以我看了

So I have looked at CombinedChartRenderer but (unlike LineChartRenderer), it does not seem to contain any functionality for filling.

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

So how can I fill the space between two lines on a CombinedChart?

推荐答案

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

You can override the createRenderers() method in the CombinedChartRenderer class. This way you can use your own renderer for each and every type of graph that you use in the your 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));
                        }
                }
            }    
        }
    }
}

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

In the above code, in the switch block when case LINE: is encountered, we replace the default renderer with our own version : MyLineChartRenderer.

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

Then finally in your Activity code, you can use this renderer with your CombinedChart :

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

这篇关于MpAndroidChart-如何在CombinedChart的两行之间填充区域?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆