achartengine是一個android平台下較好的圖形報表開發庫。該項目的地址:http://code.google.com/p/achartengine/ 。現在最新版本1.0。每個版本都有對應的jar包、demo和java doc。demo裡面的例子已經非常詳盡了,你可以先把demo下載下來匯入到eclipse裡。這兒我做一個樣本,並加上注釋。
demo裡有一個AbstractDemoChart.java的類,這個類可以作為一個父類,你畫任何圖時可以繼承自這個類。畫圖主要有兩個方面,一個是dataset即資料集,比如x/y軸的數值等;一個是renderer即渲染器,比如字型顏色、大小等等一些樣式。這個父類裡就是一些建立dataset和renderer的基本方法,當然你可以根據自己需要修改。最後通過ChartFactory類的相應方法產生對應的圖表,比如getLineChartIntent(..)產生線性表,這個返回的是一個Intent,可以直接啟動它,不過要注意在manifest檔案中要加上<activity
android:name="org.achartengine.GraphicalActivity" /> 。還可以通過ChartFactory的getLineChartView(..)返回一個線性表的view對象,這樣你可以把這個view對象放在一個布局中展示。下面是樣本的主要代碼:
public class AverageTemperatureChart extends AbstractDemoChart {public String getName() {return "Average temperature";}public String getDesc() {return "The average temperature in 4 Greek islands (line chart)";}/** * Executes the chart demo. * * @param context * the context * @return the built intent */public Intent execute(Context context) {// 每個item的titleString[] titles = new String[] { "Crete", "Corfu", "Thassos","Skiathos" };// x軸的值List<double[]> x = new ArrayList<double[]>();for (int i = 0; i < titles.length; i++) {x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });}// y軸的值List<double[]> values = new ArrayList<double[]>();values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,26.1, 23.6, 20.3, 17.2, 13.9 });values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26, 23, 18, 14,11 });values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24, 19, 15, 9, 6 });values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 });int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN,Color.YELLOW };// 點的樣式PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,PointStyle.DIAMOND, PointStyle.TRIANGLE, PointStyle.SQUARE };XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);int length = renderer.getSeriesRendererCount();// 點是空心還是實心for (int i = 0; i < length; i++) {((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);}// 圖表部分的背景顏色renderer.setBackgroundColor(Color.parseColor("#f3f3f3"));renderer.setApplyBackgroundColor(true);// 圖表與螢幕四邊的間距顏色renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3));renderer.setChartTitleTextSize(30);renderer.setAxisTitleTextSize(25);// renderer.setLegendHeight(50);// 圖例文字的大小renderer.setLegendTextSize(20);renderer.setMargins(new int[] { 50, 50, 50, 30 });// x、y軸上刻度顏色renderer.setXLabelsColor(Color.BLACK);renderer.setYLabelsColor(0, Color.BLACK);// 最後兩個參數代表軸的顏色和軸標籤的顏色setChartSettings(renderer, "Average temperature", "Month","Temperature", 0.5, 12.5, -10, 40, Color.BLACK, Color.BLACK);// 軸上數位數量renderer.setXLabels(12);renderer.setYLabels(10);// 是否顯示網格renderer.setShowGrid(true);// x或y軸上數位方向,相反的。renderer.setXLabelsAlign(Align.RIGHT);renderer.setYLabelsAlign(Align.RIGHT);// 有問題的方法// renderer.setZoomButtonsVisible(true);// renderer.setPanLimits(new double[] { -10, 20, -10, 40 });// renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });Intent intent = ChartFactory.getLineChartIntent(context,buildDataset(titles, x, values), renderer,"Average temperature");return intent;}}
代碼中的
renderer.setZoomButtonsVisible(true);
這個方法是有問題的,加上就會報錯,這個方法是顯示縮放按鈕的。一些方法可以自己修改修改看看效果,其他圖表可以參看官方的demo。
附上: