1. 程式人生 > >MPChartAndroid軸線標籤自定義的一些顯示BUG

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軸標籤個數不固定就會出現顯示問題,所以我們需要做以下設定

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型別就會出問題

這裡寫圖片描述

這時候你就需要將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() + "";
                    }
                }
            });
        }

這裡寫圖片描述

我們可以發現中間的標籤09-14 是集合第13個索引,而value12.99999強轉int就變成了12,所以這下明白了吧