Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MpAndroidChart-如何填充组合图表上两条线之间的区域?_Android_Mpandroidchart - Fatal编程技术网

MpAndroidChart-如何填充组合图表上两条线之间的区域?

MpAndroidChart-如何填充组合图表上两条线之间的区域?,android,mpandroidchart,Android,Mpandroidchart,这是一个类似的问题,显示了如何填充MpAndroidChart折线图上两条线之间的区域 但是,我使用的不是线形图,而是组合图(因为我还有条形图数据要显示)。但将上述解决方案应用于组合图表会导致此异常: java.lang.ClassCastException:org.example.MyLineLegenderer不能 被强制转换为com.github.mikephil.charting.renderer.CombinedChartRenderer 位于com.github.mikephil.c

这是一个类似的问题,显示了如何填充MpAndroidChart折线图上两条线之间的区域

但是,我使用的不是线形图,而是组合图(因为我还有条形图数据要显示)。但将上述解决方案应用于组合图表会导致此异常:

java.lang.ClassCastException:org.example.MyLineLegenderer不能 被强制转换为com.github.mikephil.charting.renderer.CombinedChartRenderer 位于com.github.mikephil.charting.charts.CombinedChart.setData(CombinedChart.java:96)

所以我已经看过了,但是(不像),它似乎不包含任何填充功能


那么,如何填充组合图表上两行之间的空间呢?

您可以覆盖
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()));