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

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();
            }       
        });
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值