您的位置:首页 > 移动开发 > Android开发

Android开发进阶系列(十) 玩转AChartEngine专题(下)

2015-11-27 16:53 225 查看
第二个项目是电力数据实时监测相关的,数据就不是从本机上读取了,而是连接到服务器与后台数据库交互。下面是三个界面对应的三种不同的显示需求:

1. 实时往前推的柱状图



初始化代码:

//画曲线
private View InitRenderer() {
/*  achartengine-1.1.0
*
*/
// 设置Renderer
renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setPointSize(5f);
renderer.setMargins(new int[] { 0, 0, 0,0 });
renderer.setMarginsColor(0xff307B63); // 外部颜色,X轴坐标
renderer.setBackgroundColor(0xff41968D); // 内部底色
renderer.setApplyBackgroundColor(true); //内部底色

// Color 和 Point Style
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(0xffEDEDED);
r.setPointStyle(PointStyle.POINT); // 点的形状
r.setFillPoints(true); // 实心点
r.setDisplayChartValues(false);// 设置不显示数值
renderer.addSeriesRenderer(r);
// Chart Settings
renderer.setChartTitle(""); // 不显示Title
renderer.setXTitle("");
renderer.setYTitle("");
//renderer.setXAxisMin(0);
renderer.setXAxisMax(barDataCount);
renderer.setYAxisMin(0);
//renderer.setYAxisMax(10);
renderer.setXLabelsColor(Color.WHITE);
renderer.setAxesColor(Color.WHITE);
renderer.setLabelsColor(Color.WHITE);
//
renderer.setXLabels(0); //设置x轴显示刻度标签的个数,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setYLabels(5); //设置y轴显示5个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setShowGrid(false); //是否显示网格
renderer.setXLabelsAlign(Align.LEFT); //刻度线与刻度标注之间的相对位置关系
renderer.setYLabelsAlign(Align.LEFT); //刻度线与刻度标注之间的相对位置关系
renderer.setPanEnabled(false);
renderer.setZoomEnabled(false);
renderer.setZoomButtonsVisible(false); // 滑动和放大缩小
renderer.setClickEnabled(false); // 不允许点击
renderer.setShowLegend(false); // 不显示图例
renderer.setShowAxes(false); // 是否显示坐标轴的轴线
renderer.setShowLabels(false); // 是否显示坐标轴区域,包括轴线和坐标值
//renderer.setMargins(new int[]{0,10,0,10});//上,左,下,右的边距
renderer.setBarSpacing(0.2f); // BarChart的条状间距
renderer.setBarWidth(5.0f); // barchart的宽度
// DataSet 初始化
FusionField.realtotaldata = new XYMultipleSeriesDataset();
SetDataSeries();
//View view = ChartFactory.getLineChartView(this, FusionField.realtotaldata, renderer);
View view = ChartFactory.getBarChartView(this, FusionField.realtotaldata, renderer, Type.DEFAULT); // 柱状图需要设置

//View view = ChartFactory.getCubeLineChartView(this, FusionField.dataset, renderer, 0.3f);//0.3f标示曲线的平滑度
return view;
}


更新数据的代码:

private void SetDataSeries() {
XYSeries series = new XYSeries("实时总功率");
for (int k = 0; k < barDataCount; k++) {
series.add(k, FusionField.total20RealPower[k]);
}
FusionField.realtotaldata.addSeries(series);
}

private void UpdateDataSeries() {
XYSeries series = (XYSeries) FusionField.realtotaldata.getSeries()[0];
if(series!=null) {
series.clear();
for (int k = 0; k < barDataCount; k++) {
series.add(k, FusionField.total20RealPower[k]);
}
} else
SetDataSeries();
}


2. 实时往后更新的曲线图



初始化代码:

//画曲线
private View InitRenderer() {
/*  achartengine-1.1.0
*
*/
// X轴数据
long now = Math.round(new Date().getTime() / DAY) * DAY - ZONEGAP; // 今日0点,-ZONEGAP是减去8小时时差
dates = new Date[COUNT5MINUTES];
for (int i = 0; i < COUNT5MINUTES; i++) {
dates[i] = new Date(now + i * MINUTE5);
}
// 设置Renderer
renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setPointSize(5f);
renderer.setMargins(new int[] { 0, 0, 0,0 });
renderer.setMarginsColor(0xff307B63); // 外部颜色,X轴坐标
renderer.setBackgroundColor(0xff41968D); // 内部底色
renderer.setApplyBackgroundColor(true); //内部底色

// Color 和 Point Style
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(Color.WHITE);
r.setPointStyle(PointStyle.POINT); // 点的形状
r.setFillPoints(true); // 实心点
r.setDisplayChartValues(true);// 设置显示数值
r.setLineWidth(3);
renderer.addSeriesRenderer(r);

// Chart Settings
renderer.setChartTitle("总功率"); // 不显示Title
renderer.setXTitle("");
renderer.setYTitle("");
renderer.setXAxisMin(dates[0].getTime());
renderer.setXAxisMax(dates[COUNT5MINUTES - 1].getTime());
renderer.setYAxisMin(0);
//renderer.setYAxisMax(10);
renderer.setXLabelsColor(Color.WHITE);
renderer.setAxesColor(Color.WHITE);
renderer.setLabelsColor(Color.GREEN);
//
renderer.setXLabels(12); //设置x轴显示12个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setYLabels(5); //设置y轴显示10个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setShowGrid(false); //是否显示网格
renderer.setXLabelsAlign(Align.LEFT); //刻度线与刻度标注之间的相对位置关系
renderer.setYLabelsAlign(Align.RIGHT); //刻度线与刻度标注之间的相对位置关系
renderer.setPanEnabled(false);
renderer.setZoomEnabled(false);
renderer.setZoomButtonsVisible(false); // 滑动和放大缩小
renderer.setClickEnabled(true); // 不允许点击
renderer.setShowLegend(false); // 不显示图例
renderer.setShowAxes(false);
//renderer.setShowLabels(false);
// DataSet 初始化
FusionField.dataset = new XYMultipleSeriesDataset();
SetDataSeries();
View view = ChartFactory.getTimeChartView(this, FusionField.dataset, renderer, "H:mm");
//View view = ChartFactory.getBarChartView(this, FusionField.dataset, renderer, Type.DEFAULT); // 柱状图需要设置

//View view = ChartFactory.getCubeLineChartView(this, FusionField.dataset, renderer, 0.3f);//0.3f标示曲线的平滑度
return view;
}


数据更新的代码:

private void SetDataSeries() {
TimeSeries series = new TimeSeries("实时总功率");
int seriesLength = dates.length;
for (int k = 0; k < seriesLength; k++) {
//series.add(dates[k], FusionField.realPower[k]);
series.add(dates[k], MathHelper.NULL_VALUE);
}
FusionField.dataset.addSeries(series);
}

private void UpdateDataSeries() {
TimeSeries series = (TimeSeries) FusionField.dataset.getSeries()[0];
if(series!=null) {
series.clear();
int seriesLength = dates.length;
for (int k = 0; k < seriesLength; k++) {
series.add(dates[k], FusionField.realPower[k]);
}
} else
SetDataSeries();
}


全屏折线图



在这张图上,显示了放大缩小按钮,也支持手势放大缩小操作。

初始化代码:

private View InitRenderer() {
/*  achartengine-1.1.0
*
*/

// X轴数据
long now = Math.round(new Date().getTime() / DAY) * DAY - ZONEGAP; // 今日0点,-ZONEGAP是减去8小时时差
dates = new Date[COUNT5MINUTES];
for (int i = 0; i < COUNT5MINUTES; i++) {
dates[i] = new Date(now + i * MINUTE5);
}
// 设置Renderer
renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
//renderer.setLegendTextSize(15);
renderer.setPointSize(5f);
renderer.setMargins(new int[] { 20, 50, 15, 20 });

// Color 和 Point Style
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(Color.GREEN);
r.setPointStyle(PointStyle.POINT); // 点的形状
r.setFillPoints(true); // 实心点
r.setDisplayChartValues(true);// 设置显示数值
renderer.addSeriesRenderer(r);
// Chart Settings
renderer.setChartTitle(""); // 不显示Title
renderer.setXTitle("时间");
renderer.setYTitle("kW");
renderer.setXAxisMin(dates[0].getTime());
renderer.setXAxisMax(dates[COUNT5MINUTES - 1].getTime());
renderer.setYAxisMin(0);
//renderer.setYAxisMax(10);
renderer.setAxesColor(Color.WHITE);
renderer.setLabelsColor(Color.WHITE);
renderer.setZoomButtonsVisible(true);
//
renderer.setXLabels(24); //设置x轴显示12个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setYLabels(10); //设置y轴显示10个点,根据setChartSettings的最大值和最小值自动计算点的间隔
renderer.setShowGrid(true); //是否显示网格
renderer.setXLabelsAlign(Align.CENTER); //刻度线与刻度标注之间的相对位置关系
renderer.setYLabelsAlign(Align.RIGHT); //刻度线与刻度标注之间的相对位置关系
//renderer.setPanLimits(new double[] { 0, 0, 0, MathHelper.NULL_VALUE }); //设置拖动时X轴Y轴允许的最大值最小值.
//renderer.setZoomLimits(new double[] {  0, 0, 0, MathHelper.NULL_VALUE });//设置放大缩小时X轴Y轴允许的最大最小值.
renderer.setShowLegend(false); // 不显示图例
// DataSet 初始化
FusionField.dataset = new XYMultipleSeriesDataset();
SetDataSeries();
View view = ChartFactory.getTimeChartView(this, FusionField.dataset, renderer, "H:mm");
//View view = ChartFactory.getCubeLineChartView(this, FusionField.dataset, renderer, 0.3f);//0.3f标示曲线的平滑度
return view;
}


数据更新代码:

private void SetDataSeries() {
TimeSeries series = new TimeSeries(title);
int seriesLength = dates.length;
for (int k = 0; k < seriesLength; k++) {
series.add(dates[k], FusionField.realPower[k]);
}
FusionField.dataset.addSeries(series);
}

private void UpdateDataSeries() {
TimeSeries series = (TimeSeries) FusionField.dataset.getSeries()[0];
if(series!=null) {
series.clear();
int seriesLength = dates.length;
for (int k = 0; k < seriesLength; k++) {
series.add(dates[k], FusionField.realPower[k]);
}
} else
SetDataSeries();
}


* Android开发进阶系列(一) 序言 *

* Android开发进阶系列(二) Tab页界面布局 *

* Android开发进阶系列(三) 系统参数的获取和Broadcast *

* Android开发进阶系列(四) 左移拉出Menu菜单界面布局 *

* Android开发进阶系列(五) 连接服务器更新APK或下载资源文件 *

* Android开发进阶系列(六) ListView的基本用法 *

* Android开发进阶系列(七) 使用数据库 *

* Android开发进阶系列(八) 界面美化之自定义弹出框 *

* Android开发进阶系列(九) 玩转AChartEngine专题(上) *

* Android开发进阶系列(十) 玩转AChartEngine专题(下) *
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: