最近实验室做到的项目,需要在手机上实时显示从WIFI模块传过来的频谱数据,通过对比网上图库,最终选了achartengine,经过这两天的研究终于搞定,在此与大家分享。
频谱图的要求如下:
1,由于是实时数据,因此需要曲线能动态更新;
2,数据上传的速度不快,中间还有可能缺失,因此需要分段显示
3,横坐标轴是随着用户输入频率的范围的变化而变化
解决动态更新:使用了timeTak和handler的结合,定时扫描,定时重绘,其中update()是重回函数
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// 刷新图表
updateChart();
super.handleMessage(msg);
}
};
task = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
timer.schedule(task, 1000, 1000);
解决分段画的画法:
XYMultipleSeriesDataset,XYMultipleSeriesRenderer分别是画线的点集数据容器和线条的颜色渲染,查看官网API发现他们是可以存放数组的;
分段刷新的思路:将指定的曲线取出,换成要刷新的数据,再重新添加到数据集的指定位置;
series=mDataset.getSeriesAt(data[0] - 1); //找到数据容器中对应的曲线,
mDataset.removeSeries(data[0] - 1);//将该曲线移除
series.clear();//清除数据点集,为新数据做准备
//填入新的数据
for (int k = 0; k < 1024; k++) {
series.add(xv[k], yv[k]);
}
// 在数据集中添加新的点集
mDataset.addSeries(data[0] - 1, series);//最后将拥有新数据的曲线凡在指定位置
最后完成刷新:chart.invalidate();
附上代码示例地址:http://download.csdn.net/detail/sangsa/9416765