MPAndroidChart圖表庫踩坑X軸自定義
阿新 • • 發佈:2019-02-19
專案中要用到圖表UI,最火的就是MPAndroidChart圖示庫,自己也是折騰了一下,寫點自己的坑,先來張效果圖!![效果圖](https://img-blog.csdn.net/20170310205746902?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVrYWk3MjE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 自己踩坑的地方是x軸要顯示字串 網上Mp類庫的用法都很全,有一些是老版本,我用的是3.X版本一些方法在別人的bolg裡面沒有或者發生改變,自己是看bolg或者去github,Mp專案中看別人的Issues,一步一步實現的x軸顯示字串 首先第一個坑是,x軸中顯示字串,自定義X軸format程式碼如下
public class MyXFormatter implements IAxisValueFormatter {
private String[] mValues;
public MyXFormatter(String[] values) {
this.mValues = values;
}
private static final String TAG = "MyXFormatter";
@Override
public String getFormattedValue(float value, AxisBase axis) {
// "value" represents the position of the label on the axis (x or y)
Log.d(TAG, "----->getFormattedValue: "+value);
return mValues[(int) value % mValues.length];
}
}
第一個坑是我設定Entry,x,y軸值出現錯誤,老是報陣列越界,後來打log除錯才發現問題
實實現圖表程式碼如下:
public class LineChartTestActivity extends AppCompatActivity {
private LineChart lineChart;
protected String[] values = new String[]{
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_line_test);
lineChart = ((LineChart) findViewById(R.id.lineChart));
lineChart.getDescription().setEnabled(false);
//自定義x軸顯示
MyXFormatter formatter = new MyXFormatter(values);
XAxis xAxis = lineChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTH_SIDED);
xAxis.setDrawAxisLine(false);
xAxis.setDrawGridLines(false);
//顯示個數
xAxis.setLabelCount(12);
xAxis.setValueFormatter(formatter);
//1 建立型別的列表Entry ,將保留您的值:
ArrayList<Entry> valsComp1 = new ArrayList<Entry>();
//2) 然後,給 lists 集合新增 Entry 物件。
//確保 Entry 物件包含的 index 都是正確的 (對於x軸來說)。
for (int i = 0; i < 12; i++) {
valsComp1.add(new Entry(i, (float) (50.000f + Math.random() * 20)));
}
//3 有了 Entry 物件的 lists 集合,再建立 LineDataSet 物件:
LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
//4 DataSets 集合和 x-axis entries 集合,來建立我們的 ChartData 物件:
ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
dataSets.add(setComp1);
LineData data = new LineData(dataSets);
data.setDrawValues(true);
lineChart.setData(data);
lineChart.invalidate();
}
}
第二個坑爹的是,我要x軸顯示每個月,我知道api中肯定有這個方法,去網上找了好久,發現2.X版本有這個設定方法,3.0中沒有,後開去githun中Issues中查詢,方法改了 成了這 //顯示個數 xAxis.setLabelCount(12);
對於這次折騰,我感覺解決問題方法還算正確, x軸設定字串顯示,寫類庫的人早就想到了,自己去查api就好,一些版本升級後,方法沒有,肯定有新的方法,再次說明,github是最好的學習工具