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

标签 android mpandroidchart

这个answer类似的问题显示了如何填充 MpAndroidChart LineChart 上两条线之间的区域。

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

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)

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

那么如何填充组合图表上两条线之间的空间?

最佳答案

您可以覆盖 createRenderers() CombinedChartRenderer中的方法类(class)。这样,您就可以为 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 .

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

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

关于android - MpAndroidChart - 如何填充组合图表上两条线之间的区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49986048/

相关文章:

android - 错误: "Method getText() must be called from the UI thread, currently inferred thread is worker."

android - ADK闪烁教程: on board LED is always on

java - 如何在一个ListView中显示一个String数组和一个Integer数组

java - 为什么我的应用中的动画在从 playStore 下载时不起作用,但在 AndroidStudio 中却起作用?

Android条形图: undo selection

java - SharedPreferences 中的多个值

java - 如何将图像上传到 Android Studio 中的图像 slider ?

java - 是否可以绘制两层饼图?

ios - iOS 图表库的问题

gradle - 用jar输出而不是aar编译MPAndroidChart lib