MPChartAndroid轴线标签自定义的一些显示BUG

MPChartAndroid的API调用我上一篇大概都介绍了,这一篇主要讲一下我项目中使用遇到的一个BUG,X轴设置标签的显示问题。

首先看一下我设置的数据

       mValues = new ArrayList<>();
        mValues.add(new Entry(0, 10,"08-1"));
        mValues.add(new Entry(1, 15,""));
        mValues.add(new Entry(2, 25,""));
        mValues.add(new Entry(3, 19,""));
        mValues.add(new Entry(4, 25,"08-10"));
        mValues.add(new Entry(5, 16,""));
        mValues.add(new Entry(6, 40,""));
        mValues.add(new Entry(7, 24,""));
        mValues.add(new Entry(8, 27,"08-21"));

我切换日期X轴显示的日期需要变化,X轴显示的标签个数也就需要动态变化

切换日期

MPChartAndroid轴线标签自定义的一些显示BUG_第1张图片

这时候有个很严重的问题,X轴标签个数不固定就会出现显示问题,所以我们需要做以下设置

xAxis.setLabelCount(mValues.size(),true);

第二个参数传true的意思就是将x轴标签按照前边设置的数字强行等分。

这时候还有一个问题就是图标设置的数据如果为空会报空指针错误,所以我加了一下的判断。

  if (Vals.size() > 0) {
            xAxis.setValueFormatter(new IAxisValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {
                    if ((int) value >= Vals.size()) {
                        return "";
                    } else {
                        return Vals.get((int) value).getData() + "";
                    }
                }
            });
        }

原本我以为这样就OK 了,最后又遇到另一个问题,当标签很多的时候value强转int类型就会出问题

MPChartAndroid轴线标签自定义的一些显示BUG_第2张图片

你会发现中间的标签不见了

这时候你就需要将value 四舍五入的转为int值

      if (mValues.size() > 0) {
            xAxis.setValueFormatter(new IAxisValueFormatter() {
                @Override
                public String getFormattedValue(float value, AxisBase axis) {

                    if ((int) value >= mValues.size()) {
                        return "";
                    } else {
                        int tag = (int) ((value * 10 + 5) / 10);
                        Log.d("New_Fragment_Date", "value..==:" + value);
                        Log.d("New_Fragment_Date", "tag:" + tag);
                        return mValues.get(tag).getData() + "";
                    }
                }
            });
        }

MPChartAndroid轴线标签自定义的一些显示BUG_第3张图片

我们可以发现中间的标签09-14 是集合第13个索引,而value12.99999强转int就变成了12,所以这下明白了吧

你可能感兴趣的:(贴代码)