AChartEngine实现Android实时曲线绘制
来源:互联网 发布:新加坡装甲车事件知乎 编辑:程序博客网 时间:2024/04/29 01:06
前两天由于项目需要做了一个基于Android的实时采集系统,需要对参数以实时曲线的形式显示,在网上找了找基于Android的图表工具以及源码,最终还是选取了AChartEngine来绘制,这个图表库用起来很是方便。下面将自己写的一个随机数的实时曲线和大家分享一下~~
本程序是基于Android2.2的
思路比较简单,即在一个MainActivity中点击按钮跳入另一个RtChartsActivity并显示实时曲线。
MainActivity中
public class MainActivity extends Activity {private Button button; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(MainActivity.this, RtChartsActivity.class);startActivity(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}
在RtChartsActivity中,首先初始化曲线,然后在Timer中定时updateChart()曲线
public class RtChartsActivity extends Activity { private Timer timer = new Timer(); private GraphicalView chart; private TextView textview; private TimerTask task; private int addY = -1; private long addX; /**曲线数量*/ private static final int SERIES_NR=1; private static final String TAG = "message"; private TimeSeries series1; private XYMultipleSeriesDataset dataset1; private Handler handler; private Random random=new Random(); /**时间数据*/ Date[] xcache = new Date[20];/**数据*/ int[] ycache = new int[20];@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.rtchart);LinearLayout layout = (LinearLayout)findViewById(R.id.linearlayout); //生成图表chart = ChartFactory.getTimeChartView(this, getDateDemoDataset(), getDemoRenderer(), "hh:mm:ss");layout.addView(chart, new LayoutParams(LayoutParams.WRAP_CONTENT,380));//为TextView添加事件textview = (TextView)findViewById(R.id.myview);textview.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(RtChartsActivity.this, "ceshiview", 1).show();Intent intent = new Intent();intent.setClass(RtChartsActivity.this, MainActivity.class);startActivity(intent);}});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 = 200; handler.sendMessage(message); } }; timer.schedule(task, 2*1000,1000);} private void updateChart() { //设定长度为20 int length = series1.getItemCount(); if(length>=20) length = 20; addY=random.nextInt()%10; addX=new Date().getTime(); //将前面的点放入缓存for (int i = 0; i < length; i++) {xcache[i] = new Date((long)series1.getX(i));ycache[i] = (int) series1.getY(i);}series1.clear();series1.add(new Date(addX), addY);for (int k = 0; k < length; k++) { series1.add(xcache[k], ycache[k]); }//在数据集中添加新的点集dataset1.removeSeries(series1);dataset1.addSeries(series1);//曲线更新chart.invalidate(); }/** * 设定如表样式 * @return */ private XYMultipleSeriesRenderer getDemoRenderer() { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); renderer.setChartTitle("实时曲线");//标题 renderer.setChartTitleTextSize(20); renderer.setXTitle("时间"); //x轴说明 renderer.setAxisTitleTextSize(16); renderer.setAxesColor(Color.BLACK); renderer.setLabelsTextSize(15); //数轴刻度字体大小 renderer.setLabelsColor(Color.BLACK); renderer.setLegendTextSize(15); //曲线说明 renderer.setXLabelsColor(Color.BLACK); renderer.setYLabelsColor(0,Color.BLACK); renderer.setShowLegend(false); renderer.setMargins(new int[] {20, 30, 100, 0}); XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(Color.BLUE); r.setChartValuesTextSize(15); r.setChartValuesSpacing(3); r.setPointStyle(PointStyle.CIRCLE); r.setFillBelowLine(true); r.setFillBelowLineColor(Color.WHITE); r.setFillPoints(true); renderer.addSeriesRenderer(r); renderer.setMarginsColor(Color.WHITE); renderer.setPanEnabled(false,false); renderer.setShowGrid(true); renderer.setYAxisMax(50); renderer.setYAxisMin(-30); renderer.setInScroll(true); //调整大小 return renderer; } /** * 数据对象 * @return */ private XYMultipleSeriesDataset getDateDemoDataset() { dataset1 = new XYMultipleSeriesDataset(); final int nr = 10; long value = new Date().getTime(); Random r = new Random(); for (int i = 0; i < SERIES_NR; i++) { series1 = new TimeSeries("Demo series " + (i + 1)); for (int k = 0; k < nr; k++) { series1.add(new Date(value+k*1000), 20 +r.nextInt() % 10); } dataset1.addSeries(series1); } Log.i(TAG, dataset1.toString()); return dataset1; } @Override public void onDestroy() { //当结束程序时关掉Timer timer.cancel(); super.onDestroy(); };}
效果是这样的~~
源程序可以在这里下载http://download.csdn.net/detail/best198706/5408151
- AChartEngine实现Android实时曲线绘制
- AChartEngine实现Android实时曲线绘制
- Android HelloChart 实现输入数据的实时曲线绘制,并保证曲线无卡滞
- Android利用Achartengine实现实时曲线图
- Android利用Achartengine实现实时曲线图
- achartengine实现平滑曲线
- android使用achartengine实现各种图形绘制
- 实时曲线绘制
- Qt- 绘制实时曲线
- C#绘制实时曲线
- android Achartengine绘制柱状图
- 用VB实现实时曲线的绘制和保存
- 在VC++中用CMSChart实现实时曲线的绘制(实例)
- CMSChart实现实时曲线的绘制(实例)参考
- wpf利用Visifire.Chart实现实时曲线绘制
- Android实现图表绘制和展示(利用Achartengine)
- 实时绘制曲线-SetROP2方法
- Android使用AchartEngine绘制曲线图
- 排序,折半查找
- Java操作PDF之itext入门
- 以前学习的jquery mobile的一些笔记
- 实验四十三Windows Server 2012 RDS桌面虚拟化之十四RemoteApp应用程序的安全管理和会话限制
- iPhone开发基础教程 笔记
- AChartEngine实现Android实时曲线绘制
- C# var标识符 和 dynamic关键字
- poj 1698 Alice's Chance
- javascript 的使用
- jquery增加与删除元素
- Oracle 学习笔记6 —— 权限管理1
- 计算一个日期中在一年中所经过的天数
- SQL中Group by[Having]和where的区别和联系
- Ubuntu 10.04休眠以后不能上网解决办法