MPAndroidChart - CustomValueFormatter从Viewport中渲染值

时间:2015-05-25 07:13:24

标签: android mpandroidchart

我几天前一直在使用HorizontalBarChart MPAndroidChart,并在尝试使用自定义ValueFormatter时遇到问题,该值会将时间从毫秒转换为12h格式时间。 (上午08:50)但是正如你在下面的图片中看到的那样,值会被修剪......

Screenshot

是否有可能为右侧的图表设置填充以使值可见?

这是配置图表的代码:

private void initializeChart() {
    // Customize user interaction on chart
    mHorizontalBarChart.setTouchEnabled(false);
    mHorizontalBarChart.setPinchZoom(false);
    mHorizontalBarChart.setDragEnabled(false);
    // Customize chart's standard settings
    mHorizontalBarChart.setDrawGridBackground(false);
    mHorizontalBarChart.setDescription("");
    mHorizontalBarChart.setHighlightEnabled(false);
    mHorizontalBarChart.getLegend().setEnabled(false);
    Paint infoPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    infoPaint.setTextAlign(Paint.Align.CENTER);
    infoPaint.setTextSize(12f);
    mHorizontalBarChart.setPaint(infoPaint, Chart.PAINT_INFO);

    // Customize X axis
    XAxis xAxis = mHorizontalBarChart.getXAxis();
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setTextSize(12f);
    xAxis.setDrawLabels(true);
    xAxis.setDrawAxisLine(false);
    xAxis.setDrawGridLines(false);
    xAxis.setAvoidFirstLastClipping(true);

    // Customize Y axis's
    // Left
    YAxis leftAxis = mHorizontalBarChart.getAxisLeft();
    leftAxis.setDrawLabels(false);
    leftAxis.setDrawAxisLine(false);
    leftAxis.setDrawGridLines(false);
    leftAxis.setDrawTopYLabelEntry(false);

    // Right
    YAxis rightAxis = mHorizontalBarChart.getAxisRight();
    rightAxis.setDrawLabels(false);
    rightAxis.setDrawAxisLine(false);
    rightAxis.setDrawGridLines(false);
    rightAxis.setDrawTopYLabelEntry(false);

}

以下是填充它的代码:

private void setChartData(float range) {
    String[] daysOfWeek = new String[]{"MO", "TU", "WE", "TH", "FR", "SA", "SU"};
    ArrayList<String> xVals = new ArrayList<String>();
    for (int i = 0; i < daysOfWeek.length; i++) {
        xVals.add(daysOfWeek[i]);
    }

    ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();

    for (int i = 0; i < daysOfWeek.length; i++) {
        float mult = (range + 1);
        float val = (float) (Math.random() * mult);
        yVals1.add(new BarEntry(val, i));
    }

    BarDataSet set1 = new BarDataSet(yVals1, "DataSet");
    set1.setBarSpacePercent(35f);

    ArrayList<BarDataSet> dataSets = new ArrayList<BarDataSet>();
    dataSets.add(set1);

    BarData data = new BarData(xVals, dataSets);
    data.setValueTextSize(10f);
    data.setValueFormatter(new ValueFormatter() {
        @Override
        public String getFormattedValue(float value) {
            return value + "some extra text";
        }
    });

    mHorizontalBarChart.setData(data);
}

非常感谢任何帮助。

代码用于@Philipp Jahoda提供的示例。

编辑:基于菲利普的答案:

我使用setSpaceTop(float percent)来调整BarData值的空间。

    // Customize Y axis's
    // Left
    YAxis leftAxis = mHorizontalBarChart.getAxisLeft();
    leftAxis.setDrawLabels(false);
    leftAxis.setDrawAxisLine(false);
    leftAxis.setDrawGridLines(false);
    leftAxis.setDrawTopYLabelEntry(false);
    leftAxis.setSpaceTop(20); // use these to adjust space for the BarData values
    // Right
    YAxis rightAxis = mHorizontalBarChart.getAxisRight();
    rightAxis.setDrawLabels(false);
    rightAxis.setDrawAxisLine(false);
    rightAxis.setDrawGridLines(false);
    rightAxis.setDrawTopYLabelEntry(false);
    rightAxis.setSpaceTop(20); // use these to adjust space for the BarData values

代码必须进行优化,这只是一个快速测试,但这些建议值得尝试。再次感谢菲利普!

Screenshot result

1 个答案:

答案 0 :(得分:1)

阅读documentation of the YAxis

专注于以下方法:

  • setAxisMaxValue(...)&amp; setAxisMinValue(...)
  • setSpaceTop(...)
  • setSpaceBottom(...)

使用它们,您可以设置轴的范围/空间。