AChartEngine應用之BarChart(動態直條圖),achartengine
AChartEngine應用之BarChart(動態直條圖)
構建動態直條圖,官方的API並沒有提供可以借鑒的動態直條圖的方法,考慮到資料都是活動的,不可能總是用待用資料,具體是通過定時器+Handler實現定時任務,通過Handler更新主線程UI,在更新之前要把之前的資料清除掉,否則那些資料都會被載入,最後重新繪製動態直條圖,構建動態直條圖的步驟主要分為以下四步,還需要在項目中引入AChartEngine依賴jar包,在Manifest中添加<activityandroid:name="org.achartengine.GraphicalActivity" />。
1.設定XYMultipleSeriesRenderer
private void mRendererSetting() {
mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setAxisTitleTextSize(16);
mRenderer.setChartTitleTextSize(20);
mRenderer.setLabelsTextSize(15);
mRenderer.setLegendTextSize(15);
mSeriesRenderer = new SimpleSeriesRenderer();
mSeriesRenderer.setColor(PieChartBuilder.getRandomColor());
mRenderer.addSeriesRenderer(mSeriesRenderer);
setChartSettings(mRenderer, "直條圖樣本", "月份", "數量", 0.5, 12.5, 0, 2400,
Color.GRAY, Color.LTGRAY);// 設定直條圖標題,橫軸(X軸)、縱軸(Y軸)、最小的伸所刻度、最大的伸所刻度
// mRenderer.getSeriesRendererAt(0).setDisplayChartValues(true);// 在第0條直條圖上顯示資料
mRenderer.setDisplayChartValues(true);
mRenderer.setXLabels(12);
mRenderer.setYLabels(10);
mRenderer.setXLabelsAlign(Align.LEFT);// 資料從左至右顯示
mRenderer.setYLabelsAlign(Align.LEFT);
mRenderer.setPanEnabled(true, false);
mRenderer.setZoomEnabled(true);
mRenderer.setZoomButtonsVisible(true);// 顯示放大縮小功能按鈕
mRenderer.setZoomRate(1.1f);
mRenderer.setBarSpacing(0.5f);// 直條圖間隔
} |
2.構建資料來源CategorySeries
/**
* 更新資料,直條圖顏色
*/
private void updateChart() {
Log.i("qiuzhping", " updateChart ok ");
mDataset.clear();
mCategorySeries.clear();
mRenderer.removeSeriesRenderer(mSeriesRenderer);
mSeriesRenderer = new SimpleSeriesRenderer();
mSeriesRenderer.setColor(PieChartBuilder.getRandomColor());
mRenderer.addSeriesRenderer(mSeriesRenderer);
Random random = new Random();
int R = random.nextInt(255);
double[] v = new double[] { R+1423, R+1230, R+1424, R+1524, R+1590, R+1920, R+2203,
R+2120, R+1950, R+1550, R+1260, R+1400 };
int seriesLength = v.length;
for (int k = 0; k < seriesLength; k++) {
mCategorySeries.add(v[k]);
}
mRenderer.setDisplayChartValues(true);
mDataset.addSeries(mCategorySeries.toXYSeries());
mChartView.repaint();
} |
3.通過ChartFactory擷取餅圖
mChartView = ChartFactory.getBarChartView(context, mDataset, mRenderer,
Type.DEFAULT);
mRenderer.setClickEnabled(true);
mLinear.addView(mChartView, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
|
4.構建定時器任務
mHandler = new Handler() {// 這裡的Handler執行個體將配合下面的Timer執行個體,完成定時更新圖表的功能
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
updateChart();// 重新整理圖表具體方法 Handler將此併入主線程
}
super.handleMessage(msg);
}
};
TimerTask task = new TimerTask() {
@Override
public void run() {// 通過訊息更新
Log.i("qiuzhping", " task ok ");
Message message = new Message();
message.what = 1;// 訊息定義標誌
mHandler.sendMessage(message);
}
};
timer.schedule(task, 500, 1000 * 10);// 執行任務
|
:
對應demo:安卓實現AChartEngine+動態餅圖+直條圖 :http://download.csdn.net/detail/qiu_11/8136467