百度ECharts---android在线展示统计图表(折线图\柱状图\饼状图)
来源:互联网 发布:动漫绘图软件 编辑:程序博客网 时间:2024/06/05 16:58
做金融类型的应用经常会用到数据的统计报表 诸如折线图 , K线图, 饼状图,柱状图 既能形象的表述数据的分布 , 同时又增加了数据的可读性
实现思路: 百度Echarts支持安卓移动端的运用 , WebView加载html, 嵌套JavaScript代码 , 即可动态实现在线图表的展示功能..
下面展示下今天要实现的效果
进入Echarts官网下载页 可以选择自己需要的图表类型 自定义下载js文件 , 精简版,常用版, 完整版 根据需求自定义下载
- 导入刚下载的图表构建工具 echarts.min.js 到安卓项目的 资产目录(assets)下 这里我使用的 完整版
- 创建 Htm l文件 , 即要展示的网页 , 文件名自定义 这里我是 myechart.html
- 我的assets目录结构如下:
- 接下来就是html文件的代码了 首先我们为ECharts准备一个具备大小(宽高) 的 DOM 并取别名
<div id="main" style="float: left; width: 600px;height:500px; margin-top: 20px"></div>
- 导入图表构建工具
<script src="js/echarts.min.js"></script>
- 因为我这里要展示多种类型的图表 所以定义了几个方法 下面以折线图为例
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: "脉搏频率 : <br/>{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 < obj.steps.length; i++){ if (obj.steps[i] < min){ min = obj.steps[i]; } } return min; } //获取数组最大值 function getMaxValue(obj){ var max = obj.steps[0]; for (var i = 1; i < obj.steps.length; i++){ if (obj.steps[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(); } }});
点击按钮加载不同的 图表
@Overridepublic 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
0 0
- 百度ECharts---android在线展示统计图表(折线图\柱状图\饼状图)
- Echarts 绘制简单的图表柱状图、折线图
- Echarts绘制折线图柱状图混合图表练习
- ECharts之柱状图 饼状图 折线图
- Android 统计图表引擎 AChartEngine(三) - 示例源码折线图、饼图和柱状图
- Android数据统计柱状图、折线图 MPAndroidChart
- PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图等
- PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图等
- PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图等
- PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图等
- Android图表超简单实现柱状图、折线图、饼状图(基于MpAndroidChart)
- Android 图表开源框架HelloCharts 之 柱状图、折线图、饼状图,Fragment
- Android图表超简单实现柱状图、折线图、饼状图(基于MpAndroidChart)
- Echarts柱状图,饼状图,折线图案例
- Echarts柱状图,饼状图,折线图案例
- jfreeChar 绘制图表(含柱状图、折线图、饼状图)
- echarts 折线图/柱状图 tooltip格式定制
- echarts(三)折线柱状图
- 监听文本框内容改变事件oninput,onpropertychange,onchange的用法和区别
- Android应用安装时因签名问题不能安装的解决方法
- 安装composer时Warning: readfile(): SSL operation failed with code 1. OpenSSL Error messages:
- Android intent传递hashMap对象,遍历hashMap,改变menu状态
- linux 文件属性与权限
- 百度ECharts---android在线展示统计图表(折线图\柱状图\饼状图)
- 布线问题
- centos查看IP地址
- 成功安装mysql后,为何服务管理器里找不到MYSQL服务名
- 分布式资源整理(未完成)
- spring通配符工具类
- Java开发报表导入,导出小工具类
- 排序算法--归并排序(MergeSort)
- java控制语句