android 绘制折线图(AChartEngine)Linechart 动态更新横轴为获取的当前时间
2014-02-26 10:03
746 查看
zjk progranm
本程序的源代码包在:http://download.csdn.net/detail/zhangjikuan/6992715
项目需要,要绘制时序图,动态的显示当前值得变化,横轴要为系统当前时间,使用timechart时横轴的时间刻度间隔是变化的,感觉不稳定,所以就直接使用linechart在横轴坐标上添加上了当前时间,固定的时间间隔达到项目需要,其他不多说,直接上程序,下面是效果图
//更新折线图
private void updatechart() {
//判断当前点集中到底有多少点,因为屏幕总共只能容纳5个,所以当点数超过5时,长度永远是5
int length=series.getItemCount();
int a=length;
if(length>5){
length=5;
}
addX=shijian.format(new java.util.Date());
addY = (float)(Math.random()*10);
//移除数据集中旧的点集
dataset1.removeSeries(series);
if(a<5)//当数据集中不够五个点的时候直接添加就好,因为初始化的时候只有一个点,所以前几次更新的时候直接添加
{
series.add(a+1, addY);//第一个参数代表第几个点,要与下面语句中的第一个参数对应
render.addXTextLabel(a+1, addX);
xkedu[a]=addX;
}
else //超过了五个点要去除xcache【0】换成【1】的.....
{
//将旧的点集中x和y的数值取出来放入backup中,造成曲线向左平移的效果
for(int i =0 ;i
ycache[i]=(float) series.getY(i+1);
xkedu[i]=xkedu[i+1];
}
//点集先清空,为了做成新的点集而准备
series.clear();
//将新产生的点首先加入到点集中,然后在循环体中将坐标变换后的一系列点都重新加入到点集中
for(int k =0 ;k
series.add(k+1, ycache[k]);
render.addXTextLabel(k+1, xkedu[k]);
}
xkedu[4]=addX;
series.add(5, addY);
render.addXTextLabel(5, addX);
}
//在数据集中添加新的点集
dataset1.addSeries(series);
//视图更新,没有这一步,曲线不会呈现动态
chart.invalidate();
}
private XYMultipleSeriesRenderer getdemorenderer() {
// TODO Auto-generated method stub
render = new XYMultipleSeriesRenderer();
render.setChartTitle("光照度实时曲线");
render.setChartTitleTextSize(20);//设置整个图表标题文字的大小
render.setAxisTitleTextSize(16);//设置轴标题文字的大小
render.setAxesColor(Color.BLACK);
render.setXTitle("时间");
render.setYTitle("光照度");
render.setLabelsTextSize(16);//设置轴刻度文字的大小
render.setLabelsColor(Color.BLACK);
render.setXLabelsColor(Color.BLACK);
render.setYLabelsColor(0, Color.BLACK);
render.setLegendTextSize(15);//设置图例文字大小
//render.setShowLegend(false);//显示不显示在这里设置,非常完美
XYSeriesRenderer r = new XYSeriesRenderer();//设置颜色和点类型
r.setColor(Color.RED);
r.setPointStyle(PointStyle.CIRCLE);
r.setFillPoints(true);
r.setChartValuesSpacing(3);
render.addSeriesRenderer(r);
render.setYLabelsAlign(Align.RIGHT);//刻度值相对于刻度的位置
render.setShowGrid(true);//显示网格
render.setYAxisMax(12);//设置y轴的范围
render.setYAxisMin(-2);
render.setYLabels(7);//分七等份
render.setInScroll(true);
render.setLabelsTextSize(14);
render.setLabelsColor(Color.BLACK);
//render.getSeriesRendererAt(0).setDisplayChartValues(true); //显示折线上点的数值
render.setPanEnabled(false,false);//禁止报表的拖动
render.setPointSize(5f);//设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)
render.setMargins(new int[]{20,30,90,10}); //设置图形四周的留白
render.setMarginsColor(Color.WHITE);
render.setXLabels(0);// 取消X坐标的数字zjk,只有自己定义横坐标是才设为此值
return render;
}
private XYMultipleSeriesDataset getdemodataset() {
// TODO Auto-generated method stub
dataset1=new XYMultipleSeriesDataset();//xy轴数据源
series = new XYSeries("光照度 ");//这个事是显示多条用的,显不显示在上面render设置
//这里相当于初始化,初始化中无需添加数据,因为如果这里添加第一个数据的话,
//很容易使第一个数据和定时器中更新的第二个数据的时间间隔不为两秒,所以下面语句屏蔽
//这里可以一次更新五个数据,这样的话相当于开始的时候就把五个数据全部加进去了,但是数据的时间是不准确或者间隔不为二的
//for(int i=0;i<5;i++)
//series.add(1, Math.random()*10);//横坐标date数据类型,纵坐标随即数等待更新
dataset1.addSeries(series);
return dataset1;
}
public void onDestroy() {
//当结束程序时关掉Timer
timer.cancel();
super.onDestroy();
}
}
本程序的源代码包在:http://download.csdn.net/detail/zhangjikuan/6992715
项目需要,要绘制时序图,动态的显示当前值得变化,横轴要为系统当前时间,使用timechart时横轴的时间刻度间隔是变化的,感觉不稳定,所以就直接使用linechart在横轴坐标上添加上了当前时间,固定的时间间隔达到项目需要,其他不多说,直接上程序,下面是效果图
//更新折线图
private void updatechart() {
//判断当前点集中到底有多少点,因为屏幕总共只能容纳5个,所以当点数超过5时,长度永远是5
int length=series.getItemCount();
int a=length;
if(length>5){
length=5;
}
addX=shijian.format(new java.util.Date());
addY = (float)(Math.random()*10);
//移除数据集中旧的点集
dataset1.removeSeries(series);
if(a<5)//当数据集中不够五个点的时候直接添加就好,因为初始化的时候只有一个点,所以前几次更新的时候直接添加
{
series.add(a+1, addY);//第一个参数代表第几个点,要与下面语句中的第一个参数对应
render.addXTextLabel(a+1, addX);
xkedu[a]=addX;
}
else //超过了五个点要去除xcache【0】换成【1】的.....
{
//将旧的点集中x和y的数值取出来放入backup中,造成曲线向左平移的效果
for(int i =0 ;i
ycache[i]=(float) series.getY(i+1);
xkedu[i]=xkedu[i+1];
}
//点集先清空,为了做成新的点集而准备
series.clear();
//将新产生的点首先加入到点集中,然后在循环体中将坐标变换后的一系列点都重新加入到点集中
for(int k =0 ;k
series.add(k+1, ycache[k]);
render.addXTextLabel(k+1, xkedu[k]);
}
xkedu[4]=addX;
series.add(5, addY);
render.addXTextLabel(5, addX);
}
//在数据集中添加新的点集
dataset1.addSeries(series);
//视图更新,没有这一步,曲线不会呈现动态
chart.invalidate();
}
private XYMultipleSeriesRenderer getdemorenderer() {
// TODO Auto-generated method stub
render = new XYMultipleSeriesRenderer();
render.setChartTitle("光照度实时曲线");
render.setChartTitleTextSize(20);//设置整个图表标题文字的大小
render.setAxisTitleTextSize(16);//设置轴标题文字的大小
render.setAxesColor(Color.BLACK);
render.setXTitle("时间");
render.setYTitle("光照度");
render.setLabelsTextSize(16);//设置轴刻度文字的大小
render.setLabelsColor(Color.BLACK);
render.setXLabelsColor(Color.BLACK);
render.setYLabelsColor(0, Color.BLACK);
render.setLegendTextSize(15);//设置图例文字大小
//render.setShowLegend(false);//显示不显示在这里设置,非常完美
XYSeriesRenderer r = new XYSeriesRenderer();//设置颜色和点类型
r.setColor(Color.RED);
r.setPointStyle(PointStyle.CIRCLE);
r.setFillPoints(true);
r.setChartValuesSpacing(3);
render.addSeriesRenderer(r);
render.setYLabelsAlign(Align.RIGHT);//刻度值相对于刻度的位置
render.setShowGrid(true);//显示网格
render.setYAxisMax(12);//设置y轴的范围
render.setYAxisMin(-2);
render.setYLabels(7);//分七等份
render.setInScroll(true);
render.setLabelsTextSize(14);
render.setLabelsColor(Color.BLACK);
//render.getSeriesRendererAt(0).setDisplayChartValues(true); //显示折线上点的数值
render.setPanEnabled(false,false);//禁止报表的拖动
render.setPointSize(5f);//设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)
render.setMargins(new int[]{20,30,90,10}); //设置图形四周的留白
render.setMarginsColor(Color.WHITE);
render.setXLabels(0);// 取消X坐标的数字zjk,只有自己定义横坐标是才设为此值
return render;
}
private XYMultipleSeriesDataset getdemodataset() {
// TODO Auto-generated method stub
dataset1=new XYMultipleSeriesDataset();//xy轴数据源
series = new XYSeries("光照度 ");//这个事是显示多条用的,显不显示在上面render设置
//这里相当于初始化,初始化中无需添加数据,因为如果这里添加第一个数据的话,
//很容易使第一个数据和定时器中更新的第二个数据的时间间隔不为两秒,所以下面语句屏蔽
//这里可以一次更新五个数据,这样的话相当于开始的时候就把五个数据全部加进去了,但是数据的时间是不准确或者间隔不为二的
//for(int i=0;i<5;i++)
//series.add(1, Math.random()*10);//横坐标date数据类型,纵坐标随即数等待更新
dataset1.addSeries(series);
return dataset1;
}
public void onDestroy() {
//当结束程序时关掉Timer
timer.cancel();
super.onDestroy();
}
}
相关文章推荐
- Android资源文件夹res/raw和assets的使用
- android 安装apk出错-INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION
- Android JNI知识简介
- 解决android-support-v4.jar引用外部项目冲突问题
- android中读取SD卡上的数据
- android动画 fillBefore 和 fillAfter的用法
- Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android
- Android 字符串文件的用处
- Android自动化测试工具调研
- 成为android开发高手要掌握的技能
- android中的文件存储
- 【android4.3】记一次完整的android源码截屏事件的捕获(不同于网上的老版本)
- Android瀑布流照片墙实现,体验不规则排列的美感
- Android中可以暂停和恢复的线程
- JNI 遇到的问题
- 虚拟化技术加速Android模拟器尝试
- android实现共享数据
- 杭州_大雲架構師_培訓課程
- android如何使得电阻屏在第一次开机时自动叫起屏幕校准程序
- android资料下载地址汇总