AChartEngine(简称ACE)是Google的一个开源图表库(for Android)。它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表。就像Web开发世界里许多功能强大的图表库一样,它也提供比较灵活的配置。
笔者将分享两个项目中对AChartEngine的使用代码,由简单到复杂。
最初接触AChartEngine是2013年利用业余时间开发一个网络信号监测APP的时候,用来显示手机信号和WiFi的变化曲线,如下图:
在一屏上,X轴总长代表60秒,即显示这60秒的信号强弱变化。
初始化代码如下:
private void InitRenderer() {
// 1, 构造显示用渲染图
renderer = new XYMultipleSeriesRenderer();
// 2,进行显示
dataset = new XYMultipleSeriesDataset();
// 2.1, 构建数据
series1 = new XYSeries("GSM/CDMA");
series1.add(0,-60);
dataset.addSeries(series1);
// 3, 对点的绘制进行设置
xyRenderer = new XYSeriesRenderer();
// 3.1设置颜色
xyRenderer.setColor(Color.GREEN);
// 3.2设置点的样式
xyRenderer.setPointStyle(PointStyle.POINT);
// 设置显示数值
xyRenderer.setDisplayChartValues(true);
//xyRenderer.setChartValuesTextSize(20);
//xyRenderer.setFillPoints(true);
//xyRenderer.setFillBelowLineColor(Color.LTGRAY);
// 3.3, 将要绘制的点添加到坐标绘制中
renderer.addSeriesRenderer(xyRenderer);
// 坐标设置
//renderer.setChartTitle( "信号强度" );
//设置x,y轴显示的排列,默认是 Align.CENTER
renderer.setXLabelsAlign(Align.CENTER);
renderer.setYLabelsAlign(Align.RIGHT);
// 设置坐标轴,轴的颜色
renderer.setAxesColor(Color.WHITE);
// 设置是否显示,坐标轴的轴,默认为 true
renderer.setShowAxes(true);
// 显示网格
renderer.setShowGrid(true);
// 禁止拖动
renderer.setClickEnabled(false);
renderer.setZoomEnabled(false);
renderer.setXTitle( "时间(s)" );
renderer.setYTitle( "信号强度(dbm)" );
renderer.setXAxisMin(0);
renderer.setXAxisMax(60);
renderer.setYAxisMin(-100);
renderer.setYAxisMax(-50);
}
对于手机信号来说,数值在-100dbm到-50dbm之间,所以Y轴设置了最大最小值范围。
数据每秒更新一次,代码如下:
private void UpdateSource() {
Timer timer = new Timer();
// 每隔1秒进行更新
timer.schedule(new TimerTask() {
@Override
public void run() {
update();
}
}, 0, 1000);
}
private static Handler hand = new Handler() {
};
public void update() {
hand.post(new Runnable() {
@Override
public void run() {
int count1 = dataset.getSeries()[0].getItemCount();
int value; // Y轴范围为-100~-50
if(myListener.lastSignalStrength > 0) //断网了
{
return;
}
if(myListener.lastSignalStrength < -100)
value = -100;
else if(myListener.lastSignalStrength > -50)
value = -50;
else
value = myListener.lastSignalStrength;
if(count1 > 60)
{
dataset.getSeries()[0].clear(); // 重新绘制
count1 = dataset.getSeries()[0].getItemCount();
}
dataset.getSeries()[0].add(count1, value);
mView.repaint();
}
});
}
- * Android开发进阶系列(一) 序言 *
- * Android开发进阶系列(二) Tab页界面布局 *
- * Android开发进阶系列(三) 系统参数的获取和Broadcast *
- * Android开发进阶系列(四) 左移拉出Menu菜单界面布局 *
- * Android开发进阶系列(五) 连接服务器更新APK或下载资源文件 *
- * Android开发进阶系列(六) ListView的基本用法 *
- * Android开发进阶系列(七) 使用数据库 *
- * Android开发进阶系列(八) 界面美化之自定义弹出框 *
- * Android开发进阶系列(九) 玩转AChartEngine专题(上) *
- * Android开发进阶系列(十) 玩转AChartEngine专题(下) *