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