廢話不多說 關於android圖表制作引擎AchartEngine的介紹我這里直接略去 大家想要了解它可以直接百度。
網上關於AChartEngine繪制柱狀圖的介紹非差稀少,而AchartEngine它本身Api幫助文檔寫的非常的簡略,給我們學習帶來很大的不便。所以我在這里憑借個人的理解,以一個簡單的柱狀圖的例子來解釋AchartEngine繪制柱圖的一個過程,希望會對大家有所幫助。
首先簡略的理解一下AchartEngine的API。
AchartEngine的提供的Api非常的簡單,其中最重要的兩個概念就是數據設置器(dataset)和所謂的描繪器(renderer)。顧名思義,數據設置器就是為我們提供了一系列對圖表進行值傳入的方法,而描繪器為我們提供了修改圖表外觀的一些方法。
本例結合簡單的SQLite數據庫表來建立一張柱狀圖
以下是我們要用到的數據庫表的信息:

其實待會我們要用到的 只有_name和money兩個字段,大家只要關注這兩個字段即可
首先 我們打開本地數據庫 得到游標:

接下去我們要聲明一個數據設置器 和一個描繪器

其中getBarRenderer()函數是我們自定義的方法,用於初始化描繪器,其方法具體如下:
//描繪器設置
public XYMultipleSeriesRenderer getBarRenderer() {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
//通過SimpleSeriesDenderer設置描繪器的顏色
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(Color.RED);
renderer.addSeriesRenderer(r);
setChartSettings(renderer);//設置描繪器的其他屬性
return renderer; }
private void setChartSettings(XYMultipleSeriesRenderer renderer) {
renderer.setChartTitle( "個人收支表" );//設置柱圖名稱
renderer.setXTitle( "名單" );//設置X軸名稱
renderer.setYTitle( "金額" );//設置Y軸名稱
renderer.setXAxisMin(0.5);//設置X軸的最小值為0.5
renderer.setXAxisMax(5.5);//設置X軸的最大值為5
renderer.setYAxisMin(0);//設置Y軸的最小值為0
renderer.setYAxisMax(500);//設置Y軸最大值為500
renderer.setDisplayChartValues(true); //設置是否在柱體上方顯示值
renderer.setShowGrid(true);//設置是否在圖表中顯示網格
renderer.setXLabels(0);//設置X軸顯示的刻度標簽的個數
}
接下去我們再來看數據設置器
//數據設置
private XYMultipleSeriesDataset getBarDataset(Cursor cur) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
CategorySeries series = new CategorySeries( "本月金額");
//聲明一個柱形圖
//為柱形圖添加值
while(cur.moveToNext())
series.add(cur.getDouble(cur.getColumnIndex("money")));
dataset.addSeries(series.toXYSeries());//添加該柱形圖到數據設置列表
return dataset; }
現在我們一張簡單圖表就建立好了,但是我們會發現我們並沒有用到_name這個字段,所以為了讓X軸上面的刻度標簽顯示為_name這個字段中的值,我們需要寫這樣一段代碼:
cur.moveToFirst();
int count=1;
do{
renderer.addTextLabel(count,cur.getString(cur.getColumnIndex("_name)));
count++;
}while(cur.moveToNext)
另外需要注意的是
在初始化描繪器的時候一定要加上renderer.setXLabels(0);
現在大功告成 ,我們再為這個Activity添加一個跳轉圖表的Intent就完成了
Intent intent = ChartFactory.getBarChartIntent (this , dataset, renderer, Type.DEFAULT );
效果如圖:

