本文將關注用achartengine包畫出數據統計圖(折線圖+餅圖)。
上圖是使用achartengine畫圖的思路,從我的理解來說共需要兩部分東西:
1.第一部分是數據相關(即圖中XYSeries和XYMutipleSeriesDataset部分)。
XYseries是爲XYchart封裝內部數據,可以看成一系列座標點(TimeChart中是Timeseries) 。要把你所要用來畫圖的數據存入這些結構中,並且要根據你所畫的圖的類型不同,將數據整理成特定的格式,例如若要畫TimeChart,它的橫軸所需的時間數據:年,月,日,時 都是有規定的。
2.第二部分是畫圖設置(即圖中XYMutilpleSeriesRenderer和XYSeriesRenderer部分)。主要是設置所畫統計圖的線的顏色、點的形狀、是否顯示數據等等。
ChartFactory官方解釋是“Utility methods for creating chart views or intents”,我的理解就是“畫圖的工廠”,你只需把以上兩部分輸入完成,ChartFactory就會完成剩下的畫圖工作。
因此,我們的主要任務就是琢磨怎麼放數據+怎麼進行圖形設置。
一 畫TimeChart(橫座標是日期時間的折線圖)
下面是生成數據集(Dataset)的函數。titles中的每個元素是一條線的名字(titles中有幾個元素就要畫幾條線);xValues是Date類型的鏈表,其元素作爲橫座標——日期時間;yValues是double類型的鏈表,其元素作爲縱座標——對應日期的數據。
1 protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List<Date[]> xValues, 2 List<double[]> yValues) { 3 XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 4 int length = titles.length; 5 for (int i = 0; i < length; i++) { 6 TimeSeries series = new TimeSeries(titles[i]); 7 Date[] xV = xValues.get(i); //畫TimeChart橫座標需要爲Date數據類型 8 double[] yV = yValues.get(i); 9 int seriesLength = xV.length; 10 for (int k = 0; k < seriesLength; k++) { 11 series.add(xV[k], yV[k]); 12 } 13 dataset.addSeries(series); 14 } 15 return dataset; 16 }
之後是生成XYMutilpleSeriesRenderer,即進行圖形設置的函數。colors[]是線相應的顏色,PointStyle[]是點的風格,如Circle,Square等。
1 protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) { 2 XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); 3 renderer.setAxisTitleTextSize(16); //各種設置。。。。 4 renderer.setChartTitleTextSize(15); 5 renderer.setLabelsTextSize(15); 6 renderer.setLegendTextSize(15); 7 renderer.setPointSize(7f); 8 renderer.setMargins(new int[] { 40, 30, 15, 0 }); //設置圖形四周的留白 9 int length = colors.length; 10 for (int i = 0; i < length; i++) { 11 XYSeriesRenderer r = new XYSeriesRenderer(); 12 r.setColor(colors[i]); 13 r.setPointStyle(styles[i]); 14 renderer.addSeriesRenderer(r); 15 } 16 return renderer; 17 }
把數據都收集好之後,就可以畫圖了,下面是畫圖的代碼。GraphicalView是一個View對象,getTimeChartView()函數得到一個這樣的對象。
1 private GraphicalView mChartView; 2 mChartView = ChartFactory.getTimeChartView(this,buildDateDataset(titles, dateList, values), 3 renderer, "M/d HH:mm"); 4 layout.removeAllViews(); //先remove再add可以實現統計圖更新 5 6 layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, 7 LayoutParams.FILL_PARENT));
以上,就畫出了TimeChart,截圖如下:
轉載http://www.cnblogs.com/water-drop/archive/2012/11/01/2750379.html