热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

百度ECharts---android在线展示统计图表(折线图\柱状图\饼状图)

做金融类型的应用经常会用到数据的统计报表诸如折线图,K线图,饼状图,柱状图既能形象的表述数据的分布,同时又增加了数据的可读性实现思路:百度Echarts支持安卓移动端的

做金融类型的应用经常会用到数据的统计报表 诸如折线图 ,  K线图, 饼状图,柱状图  既能形象的表述数据的分布 , 同时又增加了数据的可读性

实现思路: 百度Echarts支持安卓移动端的运用 , WebView加载html, 嵌套Javascript代码 , 即可动态实现在线图表的展示功能..

下面展示下今天要实现的效果




进入Echarts官网下载页 可以选择自己需要的图表类型 自定义下载js文件 , 精简版,常用版, 完整版 根据需求自定义下载

  • 导入刚下载的图表构建工具   echarts.min.js  到安卓项目的 资产目录(assets)下 这里我使用的 完整版
  • 创建 Htm l文件 , 即要展示的网页 ,  文件名自定义 这里我是 myechart.html
  • 我的assets目录结构如下:



  • 接下来就是html文件的代码了 首先我们为ECharts准备一个具备大小(宽高) 的 DOM 并取别名
  • 导入图表构建工具
  • 因为我这里要展示多种类型的图表 所以定义了几个方法  下面以折线图为例
  • var lineJson;//用于临时存储折线图json对象, 便于追加数据
    //创建折线图
     function createLineChart(obj){
         lineJson=obj;
         optiOns= {
             title : {
                     //text: '脉搏值(次/min)',
                     text: obj.title,
                     subtext: 'make by sxt',
                     x:'left'
                   },
             tooltip: {
                    trigger: 'axis',
                    formatter: "脉搏频率 : 
    {b} - {c} 次/min" }, xAxis: { id: 'dataX', type: 'category', splitLine:{ show:true }, axisLabel: { //formatter: '{value} °C' formatter: '{value}' }, data: obj.times //动态展示运动时间 }, yAxis: { type: 'value', axisLine: {onZero: true}, splitLine:{ show:true }, axisLabel: { //formatter: '{value} km' formatter: '{value}' }, min:0, max:150//在此设置范围 }, dataZoom: [ { id:'dataZoom', show:false, type: 'inside',//inside 为拖动效果 //type: 'slider',//slider为手动更新效果 realtime: true, filterMode: 'filter', start: 20, end: 85, xAxisIndex: 0 } ], series: [{ id: 'dataY', name: '脉搏频率(次)/(s)', type: 'line', smooth: true, data: obj.steps, //动态展示运动步数数据 lineStyle: { normal: { width: 3, shadowColor: 'rgba(0,0,0,0.4)', shadowBlur: 10, shadowOffsetY: 10 } }, markPoint : {//标注点 data : [//这种方式内部自动计算最值 { type :'max' , name:'最大值' , symbol:'image://' + treeUrl, symbolSize: [30, 30] }, { type : 'min', name: '最小值', symbol:'image://' + childUrl, symbolSize: [30, 30] } ] }, markLine : { data : [ {type : 'average', name: '平均值'} ] } }] }; } //更新折线图的缩放起始位置 function updateZoomState(start,end){ myChart.setOption({ dataZoom: [{ id: 'dataZoom', start: start, end: end }] }); } //获取数组最小值 function getMinValue(obj){ var min = obj.steps[0]; for (var i = 1; i max) { max = obj.steps[i]; } } return max; } //更新折线图数据 继续在后面追加数据 function updateDataXY(dataX,dataY){ myChart.setOption({ xAxis: { id: 'dataX', data:lineJson.times.concat(dataX) }, series:[{ id: 'dataY', data:lineJson.steps.concat(dataY) }], dataZoom: [{ id: 'dataZoom', start: 60, end: 100 }] }); }


     
     
     
     
     
  • 展示图表
  • //显示图表
       function createChart(type,json){
    
            if(type=='line'){
              createLineChart(json);
            }
    
            if(type=='bar'){
              createBarChart(json);
            }
    
            if(type=='pie'){
              createPieChart(json);
            }
    
            if(type=='more'){
              createMoreChart()
            }
    
            // 基于准备好的dom,初始化echarts实例
           myChart = echarts.init(document.getElementById('main'));
            //使用指定的配置项和数据显示图表。
           myChart.setOption(options);
        }
    


     
     
     
     
     
     
     
     
     
     


  • html 文件已写好  到了安卓中调用的时候了
    //进行webwiev的一堆设置
    chartshowWb.getSettings().setAllowFileAccess(true);
    chartshowWb.getSettings().setJavascriptEnabled(true);
    chartshowWb.loadUrl("file:///android_asset/echart/myechart.html");
    chartshowWb.setWebViewClient(new WebViewClient() {
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return super.shouldOverrideUrlLoading(view, url);
        }
    
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
    
            dialog.show();
        }
    
        @Override
        public void onPageFinished(WebView view, String url) {
            //最好在这里调用js代码 以免网页未加载完成
            chartshowWb.loadUrl("Javascript:createChart('line'," + EchartsDataBean.getInstance().getEchartsLineJson() + ");");
            findViewById(R.id.rl_bottom).setVisibility(View.VISIBLE);
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    });


     
     
     
     
     
  •  
  • 点击按钮加载不同的 图表 
  • @Override
    public void onClick(View view) {
        switch (view.getId()) {
    
            case R.id.linechart_bt:
                chartshowWb.loadUrl("Javascript:createChart('line'," + EchartsDataBean.getInstance().getEchartsLineJson() + ");");
                findViewById(R.id.rl_bottom).setVisibility(View.VISIBLE);
                break;
            case R.id.barchart_bt:
                chartshowWb.loadUrl("Javascript:createChart('bar'," + EchartsDataBean.getInstance().getEchartsBarJson() + ");");
                findViewById(R.id.rl_bottom).setVisibility(View.GONE);
                break;
            case R.id.piechart_bt:
                chartshowWb.loadUrl("Javascript:createChart('pie'," + EchartsDataBean.getInstance().getEchartsPieJson() + ");");
                findViewById(R.id.rl_bottom).setVisibility(View.GONE);
                break;
            case R.id.morechart_bt://createMapChart
                chartshowWb.loadUrl("Javascript:createChart('more'," + EchartsDataBean.getInstance().getEchartsLineJson() + ");");
                findViewById(R.id.rl_bottom).setVisibility(View.GONE);
                break;
            case R.id.iv_left:
                dealwithLeft();
                break;
            case R.id.iv_right:
                dealwithRight();
                break;
            default:
                chartshowWb.loadUrl("Javascript:updateDataXY(" + newDataX + "," + newDataY + ");");
                findViewById(R.id.rl_bottom).setVisibility(View.VISIBLE);
                break;
        }
    }


     
     
     
     
     

          

  • 至此 通过百度Echarts在线展示统计图表 已完成   关于动态展示数据  我们可以将要展示的数据封装成对象 ,
  • 通过Gson将集合转换成Json数据 作为参数传入即可  ,  有问题请留言...
  • 项目完整地址 github完整地址 -- https://github.com/good-good-study/HeartRate.git
    
    



推荐阅读
  • Android工程师最容易遇到4个瓶颈是什么?附带学习经验
    一些感悟穷人的一次失败,为了还债可能一辈子都翻不了身,为还债一辈子送外卖。你将不再会有精力去思考和投机。穷人的失败可能断送了他所有暴富的机遇和时间&# ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 本文出处:炎之铠csdn博客:http:blog.csdn.nettotond炎之铠邮箱:yanzhikai_yjk@qq.com本文原创,转载请注明本出处!前言 ... [详细]
  • 本文详细解析了 Yii2 框架中视图和布局的各种函数,并综述了它们在实际开发中的应用场景。通过深入探讨每个函数的功能和用法,为开发者提供了全面的参考,帮助他们在项目中更高效地利用这些工具。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 本文详细介绍了在CentOS 7上构建DNS解析服务器的步骤与配置方法。DNS系统不仅负责将主机名(域名)转换为相应的IP地址(正向解析),还能够根据IP地址反查主机名(反向解析)。此外,文章还探讨了不同类型的DNS服务器,如缓存域名服务器的作用和配置要点。通过本指南,读者可以全面了解并成功搭建一个高效稳定的DNS解析环境。 ... [详细]
author-avatar
致力于流浪动物救助量
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有