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

来源:互联网 发布:sql replace 替换空格 编辑:程序博客网 时间:2024/05/21 12:32

AChartEngine(简称ACE)是Google的一个开源图表库(for Android)。它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表。就像Web开发世界里许多功能强大的图表库一样,它也提供比较灵活的配置。

笔者将分享两个项目中对AChartEngine的使用代码,由简单到复杂。

最初接触AChartEngine是2013年利用业余时间开发一个网络信号监测APP的时候,用来显示手机信号和WiFi的变化曲线,如下图:

这里写图片描述

在一屏上,X轴总长代表60秒,即显示这60秒的信号强弱变化。

初始化代码如下:

private void InitRenderer() {        // 1, 构造显示用渲染图        renderer = new XYMultipleSeriesRenderer();        // 2,进行显示        dataset = new XYMultipleSeriesDataset();        // 2.1, 构建数据            series1 = new XYSeries("GSM/CDMA");        series1.add(0,-60);        dataset.addSeries(series1);         // 3, 对点的绘制进行设置        xyRenderer = new XYSeriesRenderer();        // 3.1设置颜色        xyRenderer.setColor(Color.GREEN);        // 3.2设置点的样式        xyRenderer.setPointStyle(PointStyle.POINT);        // 设置显示数值        xyRenderer.setDisplayChartValues(true);        //xyRenderer.setChartValuesTextSize(20);        //xyRenderer.setFillPoints(true);        //xyRenderer.setFillBelowLineColor(Color.LTGRAY);        // 3.3, 将要绘制的点添加到坐标绘制中        renderer.addSeriesRenderer(xyRenderer);        // 坐标设置        //renderer.setChartTitle( "信号强度" );        //设置x,y轴显示的排列,默认是 Align.CENTER        renderer.setXLabelsAlign(Align.CENTER);        renderer.setYLabelsAlign(Align.RIGHT);        // 设置坐标轴,轴的颜色        renderer.setAxesColor(Color.WHITE);             // 设置是否显示,坐标轴的轴,默认为 true        renderer.setShowAxes(true);        // 显示网格        renderer.setShowGrid(true);        // 禁止拖动        renderer.setClickEnabled(false);        renderer.setZoomEnabled(false);        renderer.setXTitle( "时间(s)" );        renderer.setYTitle( "信号强度(dbm)" );        renderer.setXAxisMin(0);        renderer.setXAxisMax(60);        renderer.setYAxisMin(-100);        renderer.setYAxisMax(-50);    }

对于手机信号来说,数值在-100dbm到-50dbm之间,所以Y轴设置了最大最小值范围。

数据每秒更新一次,代码如下:

    private void UpdateSource() {        Timer timer = new Timer();        // 每隔1秒进行更新             timer.schedule(new TimerTask() {            @Override            public void run() {                         update();                           }                   }, 0, 1000);            }       private static Handler hand = new Handler() {       };      public void update() {              hand.post(new Runnable() {                      @Override                       public void run() {                     int count1 = dataset.getSeries()[0].getItemCount();                int value; // Y轴范围为-100~-50                if(myListener.lastSignalStrength > 0) //断网了                {                    return;                }                 if(myListener.lastSignalStrength < -100)                    value = -100;                else if(myListener.lastSignalStrength > -50)                    value = -50;                else                    value = myListener.lastSignalStrength;                if(count1 > 60)                {                    dataset.getSeries()[0].clear(); // 重新绘制                    count1 = dataset.getSeries()[0].getItemCount();                }                               dataset.getSeries()[0].add(count1, value);                mView.repaint();            }               });    }
  • * Android开发进阶系列(一) 序言 *
  • * Android开发进阶系列(二) Tab页界面布局 *
  • * Android开发进阶系列(三) 系统参数的获取和Broadcast *
  • * Android开发进阶系列(四) 左移拉出Menu菜单界面布局 *
  • * Android开发进阶系列(五) 连接服务器更新APK或下载资源文件 *
  • * Android开发进阶系列(六) ListView的基本用法 *
  • * Android开发进阶系列(七) 使用数据库 *
  • * Android开发进阶系列(八) 界面美化之自定义弹出框 *
  • * Android开发进阶系列(九) 玩转AChartEngine专题(上) *
  • * Android开发进阶系列(十) 玩转AChartEngine专题(下) *
0 0
原创粉丝点击