MPAndroidChart:Horizo​​ntalBarChart仅在第一次显示时在屏幕外运行

时间:2018-08-23 16:18:25

标签: android mpandroidchart

我正在使用HorizontalBarChart显示来自API调用的数据。首次运行该呼叫时,图表在显示时在屏幕外运行:

如果我重新提交呼叫,则图表的大小现在正确:

当我的应用程序收到成功的网络响应时,将执行以下代码(不显示辅助方法):

public void displayBarChart() {
    barChart.setData(getBarData());
    barChart.setTouchEnabled(false);
    barChart.setFitBars(true);
    barChart.getLegend().setEnabled(false);
    barChart.getDescription().setEnabled(false);

    configureXAxis();
    configureYAxis();

    barChart.invalidate(); // refresh
}

barChart的布局代码为:

<com.github.mikephil.charting.charts.HorizontalBarChart
            android:id="@+id/bar_chart"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_marginBottom="8dp" />

barChart嵌套在LinearLayout内部的ScrollView中。所有这些视图都有layout_width="match_parent"

知道这里发生了什么吗?似乎对于第一个调用barChart并没有正确认识所需的宽度,但是随后的调用将其重置。谢谢!

更新:

经过一些试验,我确定需要在调用setData()(定义为

)后执行configureXAxis()
private void configureXAxis() {
    final XAxis xAxis = barChart.getXAxis();

    xAxis.setDrawAxisLine(false); // no axis line
    xAxis.setDrawGridLines(false); // no grid lines
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setLabelCount(2);
    xAxis.setTextSize(16f);

    xAxis.setValueFormatter(new IAxisValueFormatter() {
        @Override
        public String getFormattedValue(final float value, final AxisBase axis) {
            return labels.get((int) value);
        }
    });
}

有人知道为什么重新排序对于条形图正确显示很重要吗?

0 个答案:

没有答案