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

来源:互联网 发布:服务器地址和端口号 编辑:程序博客网 时间:2024/06/08 02:46

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

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专题(下) *
1 0
原创粉丝点击