热门标签 | 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
    
    



推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
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社区 版权所有