開源圖表庫hellocharts之最詳細的使用介紹
阿新 • • 發佈:2018-12-13
現在HelloCharts支援以下chart型別:
Line chart(cubic lines, filled lines, scattered points)(線圖)
Column chart(grouped, stacked, negative values)(柱形圖)
Pie chart(餅圖)
Bubble chart(泡泡圖)
Combo chart(columns/lines)(柱圖和線圖的組合圖)
Preview charts(for column chart and line chart)(預覽圖這個功能最牛逼,我還沒用呢,見下圖)
這樣的效果和介面我只能說“天斧神功”了。
OK閒話說完該看一下怎麼用了。
首先libs新增:
hellocharts-library-1.5.8.jar
給出地址:http://download.csdn.net/detail/u012534831/9531494
下來,XML新增一下佈局。
1. <lecho.lib.hellocharts.view.LineChartView
android:id="@+id/line_chart"
android:layout_width="fill_parent"
android:layout_height="300dp"/>
- 1
- 2
- 3
- 4
- 5
- 6
然後一個是橫座標,一個是資料點陣列。
private LineChartView lineChart;
String[] date = {"10-22","11-22","12-22","1-22","6-22","5-23","5-22","6-22","5-23","5-22"};//X軸的標註
int[] score= {50,42,90,33,10,74,22,18,79,20};//圖表的資料點
private List<PointValue> mPointValues = new ArrayList<PointValue>();
private List<AxisValue> mAxisXValues = new ArrayList<AxisValue>();
- 1
- 2
- 3
- 4
- 5
- 6
下來oncreate中3個方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lineChart = (LineChartView)findViewById(R.id.line_chart);
getAxisXLables();//獲取x軸的標註
getAxisPoints();//獲取座標點
initLineChart();//初始化
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
/**
* 設定X 軸的顯示
*/
private void getAxisXLables(){
for (int i = 0; i < date.length; i++) {
mAxisXValues.add(new AxisValue(i).setLabel(date[i]));
}
}
/**
* 圖表的每個點的顯示
*/
private void getAxisPoints(){
for (int i = 0; i < weather.length; i++) {
mPointValues.add(new PointValue(i, weather[i]));
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
private void initLineChart(){
Line line = new Line(mPointValues).setColor(Color.parseColor("#FFCD41")); //折線的顏色(橙色)
List<Line> lines = new ArrayList<Line>();
line.setShape(ValueShape.CIRCLE);//折線圖上每個資料點的形狀 這裡是圓形 (有三種 :ValueShape.SQUARE ValueShape.CIRCLE ValueShape.DIAMOND)
line.setCubic(false);//曲線是否平滑,即是曲線還是折線
line.setFilled(false);//是否填充曲線的面積
line.setHasLabels(true);//曲線的資料座標是否加上備註
// line.setHasLabelsOnlyForSelected(true);//點選資料座標提示資料(設定了這個line.setHasLabels(true);就無效)
line.setHasLines(true);//是否用線顯示。如果為false 則沒有曲線只有點顯示
line.setHasPoints(true);//是否顯示圓點 如果為false 則沒有原點只有點顯示(每個資料點都是個大的圓點)
lines.add(line);
LineChartData data = new LineChartData();
data.setLines(lines);
//座標軸
Axis axisX = new Axis(); //X軸
axisX.setHasTiltedLabels(true); //X座標軸字型是斜的顯示還是直的,true是斜的顯示
axisX.setTextColor(Color.WHITE); //設定字型顏色
//axisX.setName("date"); //表格名稱
axisX.setTextSize(10);//設定字型大小
axisX.setMaxLabelChars(8); //最多幾個X軸座標,意思就是你的縮放讓X軸上資料的個數7<=x<=mAxisXValues.length
axisX.setValues(mAxisXValues); //填充X軸的座標名稱
data.setAxisXBottom(axisX); //x 軸在底部
//data.setAxisXTop(axisX); //x 軸在頂部
axisX.setHasLines(true); //x 軸分割線
// Y軸是根據資料的大小自動設定Y軸上限(在下面我會給出固定Y軸資料個數的解決方案)
Axis axisY = new Axis(); //Y軸
axisY.setName("");//y軸標註
axisY.setTextSize(10);//設定字型大小
data.setAxisYLeft(axisY); //Y軸設定在左邊
//data.setAxisYRight(axisY); //y軸設定在右邊
//設定行為屬性,支援縮放、滑動以及平移
lineChart.setInteractive(true);
lineChart.setZoomType(ZoomType.HORIZONTAL);
lineChart.setMaxZoom((float) 2);//最大方法比例
lineChart.setContainerScrollEnabled(true, ContainerScrollType.HORIZONTAL);
lineChart.setLineChartData(data);
lineChart.setVisibility(View.VISIBLE);
/**注:下面的7,10只是代表一個數字去類比而已
* 當時是為了解決X軸固定資料個數。見(http://forum.xda-developers.com/tools/programming/library-hellocharts-charting-library-t2904456/page2);
*/
Viewport v = new Viewport(lineChart.getMaximumViewport());
v.left = 0;
v.right= 7;
lineChart.setCurrentViewport(v);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
Viewport v = new Viewport(lineChart.getMaximumViewport());
v.left = 0;
v.right= 7;
lineChart.setCurrentViewport(v);
- 1
- 2
- 3
- 4
這4句程式碼可以設定X軸資料的顯示個數(x軸0-7個數據),
1 當資料點個數小於(29)的時候,縮小到極致hellochart預設的是所有顯示。
2 當資料點個數大於(29)的時候,
2.1 若不設定axisX.setMaxLabelChars(int count)這句話,則會自動適配X軸所能顯示的儘量合適的資料個數。
2.2 若設定axisX.setMaxLabelChars(int count)這句話, 33個數據點測試,
2.2.1 若 axisX.setMaxLabelChars(10); 裡面的10大於v.right= 7; 裡面的7,則 剛開始X軸顯示7條資料,然後縮放的時候X軸的個數會保證大於7小於10
2.2.2 若小於v.right= 7;中的7,反正我感覺是這兩句都好像失效了的樣子 - -!
若這兒不設定 v.right= 7; 這句話,則圖表剛開始就會盡可能的顯示所有資料,互動性太差
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
下面看一下固定Y軸個數的解決方案:
例:想要固定Y軸資料從0-100
Axis axisY = new Axis().setHasLines(true);
axisY.setMaxLabelChars(6);//max label length, for example 60
List<AxisValue> values = new ArrayList<>();
for(int i = 0; i < 100; i+= 10){
AxisValue value = new AxisValue(i);
String label = "";
value.setLabel(label);
values.add(value);
}
axisY.setValues(values);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
可見,只要自己去按照比例去分割資料就行了。
好,基本就到這兒。
原始碼github地址:https://github.com/qht1003077897/hellocharts-line.git
csdn下載地址:http://download.csdn.net/detail/u012534831/9531702
出處:http://blog.csdn.net/u012534831/article/details/51505683