Android项目中使用echarts

Android使用Echarts 进行图表开发 (WebView加载) 在两年前时候北京的一家公司是给高中生做理化生结合他们课本做的一款App,App中的功能是实现一些点线图和柱状图还有扇形图,平时开发中其实App中去加载一些这种数据图很少遇到, 但是也会有很多人不太理解在实际的Android开发中怎么去运用开发,其实Android中自定义View是可以实现的,但是市面上科技已经很发达 有很多第三方的开源运用js写的,使... 阅读详情

写在开始之前

之前在项目中使用过MPAndroidChart 显示过数据图表,现在需要使用HTML + Echart 来显示,写了一个Demo,DEMO中实现了线图,饼图,还有柱状图。

示例代码地址:点击跳转到github

使用到的开源项目

  • EChart 库 -js
    • 版本:2.2.7
  • EChart java 对象库 这是一个针对ECharts3.x(2.x)版本的Java类库,实现了所有ECharts中的Json结构对应的Java对象,并且可以很方便的创建Option。这个库引用了Gson,所以build.gradle 中也要加入GSON 的依赖。
    • 版本 2.2.7

JS 和 html 编写

为方便测试,html页面和js代码放置于项目的assets 目录中,Android代码访问路径为:file:///android_asset/jsWeb/echart.html

html 页面编写

  1. 在head中引入 js 脚本,主要代码如下:(点击查看全部代码:echart.html)
     <head>
          <!-- 导入script -->
          <script src="http://echarts.baidu.com/echarts2/doc/example/www/js/echarts.js"></script>
         <script src="./android.js"></script>
     </head>
  2. body中请求需要的EChart脚本,并添加对应控件,主要代码如下: ( 点击查看全部代码:echart.html) 。 我在其中添加了一个js中指定数据的EChart 表格用于测试

    <div id="main" style="height:400px"></div>
     <script type="text/javascript">
             // 路径配置
             require.config({
               paths: {
                 echarts: 'http://echarts.baidu.com/echarts2/doc/example/www/js'
                 //echarts: './www/js'
               }
             });
             // 使用
             require(
               [
                 'echarts',
                 'echarts/chart/line', // 使用柱状图就加载line模块,按需加载
                 'echarts/chart/bar', // 使用柱状图就加载bar模块,按需加载
                 'echarts/chart/pie', // 使用柱状图就加载pie模块,按需加载
               ],
               function (ec) {
                 // 基于准备好的dom,初始化echarts图表
                 var myChart = ec.init(document.getElementById('main'));
                 //设置数据
                 var option = {
                 // .... 数据部分
             };
                 // 为echarts对象加载数据
                 myChart.setOption(option);
               }
             )
     </script>
    
     <hr/>
     <p>
     <b>从Android 代码中获取数据绘制图表</b><br/>
     <button onClick="loadALineChart()" style="height:40px">线状图</button>
     <button onClick="loadAChart(2)" style="height:40px">饼状图</button>
     <button onClick="loadAChart(1)" style="height:40px">柱状图</button>
    
     <p id="textcontent">没有内容</p>
     <div id="chart2" style="height:400px"/>
     </p>

JS 脚本

这里有一点要注意:Android WebView 提供的接口返回String 类型的json option 字符串,而JS 端接受到字符串后需要用JSON.parse 方法转化成js的Object 对象,只有转换成对象之后才可以传入到Echart的setOption 方法中显示出来。
主要代码如下,点击查看全部代码

        function toast(msg){
        Android.showToast(msg);
        }

        function loadALineChart(){
            // 必须加JOSN.parse 转换数据类型
            var option = JSON.parse(Android.getLineChartOptions());

            var chart2Doc = document.getElementById('chart2');
            var myChart2 = require('echarts').init(chart2Doc);

            myChart2.setOption(option);
            document.getElementById('textcontent').innerHTML=option;
            toast(option);
        }

        /**
        type :  1 - 饼状图
                2 - 柱状图
        */
        function loadAChart(type){
            // 必须用JSON.parse() 转换一下,才可以显示,否则数据类型会不对
            var option = JSON.parse(Android.getPieChartOptions(type));
            var chart2Doc = document.getElementById('chart2');
            var myChart2 = require('echarts').init(chart2Doc);

            myChart2.setOption(option);
            document.getElementById('textcontent').innerHTML=option;
        }

Android 代码编写

1. WebAppInterface 定义和实现

点击查看全部文件内容

   /**
 * 注入到JS里的对象接口
 */
class WebAppInterface {
    Context mContext;

    public WebAppInterface(Context c) {
        mContext = c;
    }

    /**
     * 获取
     *
     * @return
     */
    @JavascriptInterface
    public String getLineChartOptions() {
        GsonOption option = markLineChartOptions();
        LogUtils.d(option.toString());
        return option.toString();
    }

    @JavascriptInterface
    public void showToast(String msg) {
        Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
    }

    /**
     * PieChart 或者柱状图数据示例
     * @param type 1 - 饼状图数据; 2 - 柱状图数据
     * @return
     */
    @JavascriptInterface
    public String getPieChartOptions(int type) {

        mWebView.post(new Runnable() {
            @Override
            public void run() {
                showDialog();
            }
        });
        try {
            Thread.currentThread().sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //地址:http://echarts.baidu.com/doc/example/pie7.html
        GsonOption option = new GsonOption();
        // 设置标题
        option.title(new Title().text("某站点用户访问来源").subtext("纯属虚构").x(X.center));
        if(type == 2) {
            option.tooltip().trigger(Trigger.item).formatter("{a} <br/>{b} : {c} ({d}%)");
        }else  if(type == 1){
            option.tooltip().trigger(Trigger.item).formatter("{a} <br/>{b} : {c}");
        }
        // 设置图例
        option.legend().data("直接访问", "邮件营销", "联盟广告", "视频广告", "搜索引擎").orient(Orient.vertical).x(X.left);

        // 是否可以拖动以计算
        option.calculable(true);

        if(type == 2){
            // 构造数据
            Pie  pie1 = new Pie("访问来源");
            pie1.type(SeriesType.pie).radius("45%").center("50%","60%");
            pie1.data(new Data("直接访问",335),
                    new Data("邮件营销",310),
                    new Data("联盟广告",234),
                    new Data("视频广告",135),
                    new Data("搜索引擎",1548)
            );
            option.series(pie1);
        }else  if(type ==1) {
            // 构建柱状数据
            option.xAxis(new CategoryAxis().name("访问来源").data("视频广告","搜索引擎","联盟广告","邮件营销","直接访问"));
            option.yAxis(new ValueAxis());

            Bar bar = new Bar("访问来源");
            bar.data(11,4,14,45,67,88);
            option.series(bar);
        }
        Log.d("TAG",option.toString());
        mWebView.post(new Runnable() {
            @Override
            public void run() {
                dismissDialog();
            }
        });
        return option.toString();
    }


    @JavascriptInterface
    public GsonOption markLineChartOptions() {
        GsonOption option = new GsonOption();
        option.legend("高度(km)与气温(°C)变化关系");

        option.toolbox().show(true).feature(Tool.mark, Tool.dataView, new MagicType(Magic.line, Magic.bar), Tool.restore, Tool.saveAsImage);

        option.calculable(true);
        option.tooltip().trigger(Trigger.axis).formatter("Temperature : <br/>{b}km : {c}°C");

        ValueAxis valueAxis = new ValueAxis();
        valueAxis.axisLabel().formatter("{value} °C");
        option.xAxis(valueAxis);

        CategoryAxis categoryAxis = new CategoryAxis();
        categoryAxis.axisLine().onZero(false);
        categoryAxis.axisLabel().formatter("{value} km");
        categoryAxis.boundaryGap(false);
        categoryAxis.data(0, 10, 20, 30, 40, 50, 60, 70, 80);
        option.yAxis(categoryAxis);

        Line line = new Line();
        line.smooth(true).name("高度(km)与气温(°C)变化关系").data(15, -50, -56.5, -46.5, -22.1, -2.5, -27.7, -55.7, -76.5).itemStyle().normal().lineStyle().shadowColor("rgba(0,0,0,0.4)");
        option.series(line);
        return option;
    }
}

2. WebView 上启用JavaScript 并注入Java对象:

点击查看全部文件内容

     webSettings.setJavaScriptEnabled(true);
     mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");


作者:HanlyJiang
链接:http://www.jianshu.com/p/7b226e0e5f12
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
android 中图表展示的实现——echarts方式实现 android 中想要实现图表的展示,非常麻烦。网上查了一下实现方案,无非三种: 1.自己写画布,慢慢实现,要求太高,很难搞定。 2.用AchartEngine实现,丑陋,而且扩展性很小。 3.采用webview加载js的方式,虽然理论上会比较耗费资源,但是效果不错,而且难度小很多。 下面以一个例子具体介绍依稀这种方式: 首先布局文件: <RelativeLayout xmlns:an 阅读详情

相关推荐

Keil中搭建自动化单元测试框架Unity

前言:   虽然一些C++的自动化单元测试框架也能用来C语言单元测试,但那样我们编写C语言程序时需要符合C++的标准,这样有一些C的特性是无法使用的,限制C的特性使用不太好,于是找了一个全部用C实现的自动化测试框架。Unity是一个简单且直接的自动化单元测试框架,它由很少的几个文件构成。 搭建环境:   1.从github上下载最新版本的Unity源码,下载链接:https://github...

程序员的自我修炼 3898

在Android中使用EChart做图表

Android做图表其实很简单,一起来看看Echart吧

夨坕的博客 1804

攻克+86手机号Discord验证墙:从“无效”到“成功”的实战指南

本文提供了一份针对+86手机号在Discord注册时频繁遭遇“手机号无效”问题的实战解决指南。文章系统分析了问题根源,并分步详解了从打造纯净网络环境、尝试多种手机号格式(如+86前加0),到更换iOS等客户端设备的有效方法,旨在帮助用户成功完成Discord手机号验证。

mac99的博客 1105

android 中使用Echarts 动态赋值

android 引用 百度Echarts 动态赋值,界面展示

qq_43670077的博客 1383

ArcMap新手必看:Shape属性中的点ZM值到底是什么?如何快速处理

本文深入解析ArcMap中Shape属性中的点ZM值,揭示其在GIS数据中的隐藏维度作用,包括Z值(高程值)和M值(测量值)。针对ZM值可能引发的服务发布问题,提供三种高效处理方案,帮助新手快速掌握数据导入时的ZM值管控策略及精准去除方法。

weixin_42561476的博客 431

Windows Server+SqlServer Always On实战:5步搞定高可用集群搭建

本文详细介绍了在Windows Server环境中,通过5个关键步骤搭建SQL Server Always On高可用集群的实战指南。内容涵盖从底层故障转移集群配置、SQL Server实例启用Always On功能,到创建可用性组和侦听器的完整流程,并提供了核心运维与故障排查思路,帮助企业构建稳定可靠的数据库高可用架构。

milk5的博客 857

android中实现echarts的工具,Android项目中使用echarts

之前都是在web网页端使用echarts,现在在android项目中使用echarts,实现柱状图、折线图、雷达图等,以柱状图为例。1、首先去echarts官方下载echarts下载js文件,最好下载完整版的,也可以根据自己的需要自定义构建。图1下载下来的js文件如图所示图22.将下载下来的js文件放到android工程的assets文件夹下图33.用WebView加载html,首先创建html文...

weixin_30232751的博客 992

IEEE ACCESS Please note that all author names should be listed in English.(所有作者名需用英文名列出)

很奇怪哈,我明明手稿和提交页面作者都是用的英文,但是为什么还是会提示我没用英文呢?后来给编辑发消息,回的很快,他给我发了一个截图,确实是出现中文,但是我还是不知道为啥会出现中文。直到晚上回寝室洗澡的时候忽然想起来了是不是orcid的原因,因为它会强制作者绑定一个orcid账号,而我的orcid账号的名字刚好是中文的。当然这个只是我的一个猜想,但是我觉得可能性很大。我的第二篇论文已经投稿了快三个月了,效果非常的不好,所以我打算转投IEEE ACCESS了,希望这里可以给我一点好的建议。

kuyecsl的博客 3310

在Android项目中引入Echarts绘制K线图:从基础到实战技巧

在Android项目中使用Echarts绘制K线图,我们要先搭建好开发环境。确保已经安装了Android Studio,这是Android开发的主要工具。创建一个新的Android项目,在项目创建过程中,按照自己的需求配置项目名称、包名以及最低支持的Android版本等基本信息。

Myqijiahai的博客 1313

记一次springboot集成海康威视SDK过程

一开始没有接触过物联网这块,走了很多弯路,后面还是自己一点点摸索出来的。有个项目,需要对海康的门禁设备进行集成,后台统一管理设备,进行设备人脸数据的下发、删除等操作。3.我还接入了门禁设备的事件监听,门禁所有的事件都会上报到后台服务,这块代码有需要的可以找我。在linux系统中,sdk我使用的是绝对路径,把Linux版本的文件放到服务时,Acs文件夹下的 各个Manage都有现成的代码,可以根据自己的需要调用即可。路径也不要有中文,切记!2.sdk的存放路径不要有中文,不然会出现很多奇怪的问题。

huang_xiaoen的博客 2348

069、自动曝光(AE)测光策略:全局/中心/点测光与曝光时间增益分配

本文深入探讨了自动曝光(AE)测光策略的技术细节与实际应用。作者通过多个真实案例(手机前置摄像头、车载ADAS、安防监控等)分析了全局测光、中心测光和点测光的优缺点,指出不同场景应采用不同策略。重点剖析了曝光时间与增益分配的"跷跷板效应",提出要根据传感器特性选择最优分配方案。文章强调测光策略应动态调整,并给出5条实用建议:结合场景切换测光模式、关注传感器增益拐点、点测光需防抖处理、全局测光不宜迷信、调试要观察亮度直方图。最后指出AE调试需要结合具体硬件特性进行实测优化,没有通用解决方案。

zzfmlxs的博客 100

Android使用ECharts详解简书,Vue项目中使用Echarts

网上方法千千万,由己验明知真假。———— 只灯片笺本文主要内容:1. 如何在Vue项目中引入Echarts;2. 如何使用Echarts在vue项目中;3. 如何更新数据;1.引入 Echartsa. 安装 Echarts;npm install echartsb. 查看是否引入成功;npm list --depth=0引入成功.pngc. 在 main.js 中输入如下内容,全局引入;// 全局...

weixin_32018379的博客 460

nuScenes数据集详细介绍

nuScenes网上介绍资料较多,但是大部分仅仅是对官网的翻译,缺乏各个文件的内在联系介绍。例如,nuScenes激光雷达的数据格式,点云包含哪几种属性。再比如,sample文件夹和sweeps文件夹下的文件关系,以及是如何在相关json文件中体现的。本文将详细介绍nuScenes数据集的各个部分。

叶子的博客 1万+

记一次微信小程序使用echarts安卓机闪退问题

在项目中使用echarts插件,在要测试的时候发现 安卓机闪退。。。一脸懵逼。。 但是其他的地方使用echarts发现不会出现闪退问题 将问题定位到option中的配置上 一个一个配置测试发现 导致安卓机闪退是使用了graphic这个配置导致 注释掉就好了。 另外 本想使用真机调试echart 结果发现出现一个错误 查看相关文档才知道 canvas2D暂时不支持真机调试 希望可以帮到大家。 ...

weixin_42369292的博客 1850

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【React Native】React Native 使用百度 Echarts 图表之 Android 端打包后图表不显示的解决办法

参考资料:React Native使用百度Echarts显示图表 前言: 1.Echarts是百度推出的免费开源的图表组件,功能丰富,涵盖各行业图表。 2.Echarts组件是兼容IOS和安卓双平台的。 安装: 在React Native项目中安装native-echarts组件,代码如下所示: npm install native-echarts --save 安装完成之后,在n...

Dora_5537的博客 1260

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Uniapp使用echarts打包之后界面不显示(h5正常)#uniapp使用echarts遇到的坑

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

Codernmx 3124

【Android】插入ECharts图表

轻松导入ECharts

mycocoo的博客 3541

Echarts tooltip 被遮挡解决方法

日常踩坑笔记 在 tooltip 里设置以下代码 tooltip: { position: function (point, params, dom, rect, size) { dom.style.transform = 'translateZ(0)' } }

ZionHH的博客 4639

Android图表开发之ECharts

开始这篇文章之前,需要提到一个上篇文章中忘记说的一个问题,就是我们在使用HelloCharts绘制折线图的时候,当我们进入其它界面后重新进入该界面有可能会出现折线图中首尾两个点相连的奇怪现象(兴许还有其他绘制怪象),这是因为数据残留的原因,所以我们需要每次在绘制图表的时候先清除一下之前的数据,清除方法就是把我们用来存储PointValue的集合clear一下就OK了!那今天我们就来聊聊EChart...

chouGod的博客 7141

在Android中使用EChart

在Android中使用EChart

qq_36056790的博客 5382

android图表实例,使用echarts绘制android图表

【实例简介】使用echarts实现在android中的图表展示。【实例截图】【核心代码】EchartST└── EchartST├── AndroidManifest.xml├── assets│ └── echart│ ├── js│ │ ├── chart│ │ │ ├── bar.js│ │ │ ├── chord.js...

weixin_32584807的博客 299

android+折线图填充色,Vue项目eCharts折线图区域渐变填充

我在Vue项目中使用eCharts生成折线图,现在希望给区域添加渐变效果,但在areaStyle中设置了无效,具体代码如下drawLine () {let echart = this.$echarts.init(document.getElementById('echart'))echart.setOption({xAxis: {data: ['a','b','c','d','e'],bounda...

weixin_36103691的博客 409

Ecahrts在低版本安卓中折线图不显示

在项目中遇到一个问题,就是echarts在ios和高版本安卓中折线图显示正常,但是在低版本安卓机中,无法显示折线图内容。 原图表代码实现的主要是折线图,并且渐变填充,代码如下: 但是在低版本安卓中,却出现了图表不显示,只显示横纵坐标轴。 经分析,坐标轴可以显示,说明echatrs是支持低版本安卓的,既然图表不显示,很有可能就是渲染问题,确认不是数据的原因后,依次测试了只有折线图的情况,结果发现折线图可以正常显示。 这里截图是浏览器的图,没有截真机的图。 折线图可以显示,那很有可能就是填充颜色的部分有问题

BeStronger 1332

android 用echarts绘制图表(折线与柱状图)

Android使用echarts绘制图表

qq_30089721的博客 3224

react native使用echarts图表

react native使用echarts图表

XKFC1的博客 4941
上一篇: MySQL索引
下一篇: EasyWeChat、微信公众平台实现带参数二维码、微信事件处理以及微信详细用户信息获取
dwf_学海无涯
博客等级 码龄10年 42粉丝 14原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值