Android 调用echart图表,实现牛逼的效果

来源:互联网 发布:手机八格切图软件 编辑:程序博客网 时间:2024/04/30 17:25

最近项目中需要用图表,看到了echart图表的效果,和动画都很吊,于是使用webview加载试试,用来交流一下,好了不多说了贴代码了:

首先自己在本地建立一个自己的echarts.html;

<!DOCTYPE html><!-- saved from url=(0053)http://echarts.caixin.com/doc/example/www2/index.html --><html lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">    <title>ECharts</title></head><body><!--Step:1 Import echarts-plain.js or echarts-plain-map.js--><!--Step:1 引入echarts-plain.js或者 echarts-plain-map.js--><script src="./ECharts_files/echarts-plain-map.js"></script><!--<script src="./ECharts_files/henan.js"></script>--><!--Step:2 Prepare a dom for ECharts which (must) has size (width & hight)--><!--Step:2 为ECharts准备一个具备大小(宽高)的Dom--><div id="main" style="width:410px;height:310px;"></div><!--<div id="main"--><!--style="height: 100%; width: 100%;"></div>--><script type="text/javascript">      <!--Step:3 echarts & zrender as a Global Interface by the echarts-plain.js.-->      <!--Step:3 echarts和zrender被echarts-plain.js写入为全局接口-->       var myChart;       var option = {           title : {               text : "Echart测试"           },           tooltip : {               show : false           },           toolbox : {               show : false           },       };      function createBarChart(objJson){           option = {               title: {                  show:false,                  left :'center',                  top : 'middle',                  text: objJson.TileName               },               tooltip : {                  trigger: 'axis'               },               legend: {                  data:objJson.LegendData               },               toolbox: {                  show : false,                  feature : {                     mark : true,                     dataView : {readOnly: false},                     magicType:['line', 'bar'],                     restore : true,                     saveAsImage : true                  }               },               calculable : true,               xAxis : [                  {                     type : 'category',                     data : objJson.XAxisData                  }               ],               yAxis : [                  {                     type : 'value',                     splitArea : {show : true}                  }               ],               series :objJson.SeriesData           };      }      <!--开始的位置-->      function createBChart(objJson){                option = {                    title: {                                text: objJson.TileName,                     },                tooltip: {                                trigger: 'axis',                                axisPointer: {                                         type: 'shadow'                                              }                            },                legend: {                            data:objJson.LegendData                            },                grid: {                        left: '3%',                        right: '4%',                        bottom: '3%',                        containLabel: true                            },                xAxis: {                        type: 'value',                        boundaryGap: [0, 0.01]                        },                yAxis: {                        type: 'category',                        data : objJson.XAxisData                        },                series :objJson.SeriesData                };        }         function createTChart(objJson){option = {    tooltip: {        trigger: 'axis',        axisPointer: {            type: 'cross',            crossStyle: {                color: '#999'            }        }    },    toolbox: {        feature: {            dataView: {show: true, readOnly: false},            magicType: {show: true, type: ['line', 'bar']},            restore: {show: true},            saveAsImage: {show: true}        }    },    legend: {        type: 'category',       data:objJson.LegendData    },    xAxis:[        {            type : 'category',         data : objJson.XAxisData        }],    yAxis:[    {            type: 'value',            axisLabel: {                formatter: '{value}'            }        },        {            type: 'value',            axisLabel: {                formatter: '{value}'            }        }    ],    series :objJson.SeriesData};}      function createPieChart(objJson){           option = {               title: {                  show:false,                  text: objJson.Title,                  left: 'center',                  textStyle: {                     color: '#fff'                  }               },               tooltip : {                  trigger: 'item',                  formatter: "{a} <br/>{b} : {c} ({d}%)"               },               legend: {                  orient : 'vertical',                  x : 'left',                  data:objJson.LegendData               },               toolbox: {                  show : false,                  feature : {                     mark : {show: true},                     dataView : {show: true, readOnly: false},                     restore : {show: true},                     saveAsImage : {show: true}                  }               },               calculable : true,               series :objJson.SeriesData            };      }      function randomData() {         return Math.round(Math.random()*1000);      }      function doCreatChart(specificChartFunction){          myChart = echarts.init(document.getElementById('main'));          myChart.clear();         myChart.showLoading({            text : "图表数据正在努力加载..."         });         specificChartFunction;         myChart.setOption(option); //先把可选项注入myChart中         myChart.hideLoading();      }      //JS 按顺序加载,所以调用的放在最后      function createChart(chartKind,objJson){        if (chartKind=='bar') {            doCreatChart(createBarChart(objJson));         };        if (chartKind=='pie') {            doCreatChart(createPieChart(objJson));         };         if (chartKind=='map') {            doCreatChart(createMapChart(objJson));         };         if(chartKind=='b'){          doCreatChart(createBChart(objJson));          }          if(chartKind=='t'){          doCreatChart(createTChart(objJson));          }      }      </script></body></html>
好了以上就是HTML文件了,当我们需要加载的时候怎么干呢?
String json="{"TileName":"","LegendData":["农用地面积","农用地比重"],"XAxisData":["农用地面积","平均值"],"SeriesData":[{"type":"bar","name":"农用地面积","data":["97349","140054.9393939394"]},{"type":"line","name":"农用地比重","yAxisIndex":"1","data":["75.83","73.10636363636364"]}]}";
//进行webwiev的一堆设置//开启本地文件读取(默认为true,不设置也可以)mWebview.getSettings().setAllowFileAccess(true);//设置编码mWebview.getSettings().setDefaultTextEncodingName("utf-8");// 设置可以支持缩放mWebview.getSettings().setSupportZoom(true);// 设置出现缩放工具mWebview.getSettings().setBuiltInZoomControls(false);mWebview.setBackgroundColor(Color.argb(0, 0, 0, 0));//chart_WebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);// 清除浏览器缓存mWebview.clearCache(true);//开启脚本支持mWebview.getSettings().setJavaScriptEnabled(true);//  放在 assets目录//获取Assets目录下的文件mWebview.loadUrl("file:///android_asset/echart/echarts.html");//在当前页面打开链接了mWebview.setWebViewClient(new WebViewClient() {    
@Overridepublic void onPageFinished(WebView view, String url) {
//注意这里区分加载的类型  't','b','pie','bar';跟上面HTML对应就行    mWebview.loadUrl("javascript:createChart('t'," + json + ");");    super.onPageFinished(view, url);}
});//js加上这个就好啦!mWebview.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); }});
上面给你送了个写好的json ,当然先拷HTML文件,你可以拷过去试试.
那么我们要怎么写自己的json数据,给你一个类吧,其他仿照这个来写就好了;
package com.example.geoway.gw.chartutil;import java.util.ArrayList;/** * Created by yaoke on 2017/9/20. */public class DataForLineAndBar {    private static final String Title="TileName";    private static final String LegendData = "LegendData";    private static final String XAxisData = "XAxisData";    private static final String SeriesData = "SeriesData";    private static final String SeryName = "name";    private static final String SeryData = "data";    private static final String SeryType = "type";    public static final String SeryType_Bar = "bar";    public static final String SeryType_Line = "line";    private String m_Title = "";    public String getTile(){return m_Title;}    public void setTitle(String title){m_Title = title;}    private ArrayList<String> m_LegendData = new ArrayList<String>();    private ArrayList<String> m_Type=new ArrayList<>();//用来存type类型    private ArrayList<String> m_xAxisData= new ArrayList<String>();    private ArrayList<ArrayList<String>> m_seriesData= new ArrayList<ArrayList<String>>();    public ArrayList<String> getM_Type() {        return m_Type;    }    public void setM_Type(ArrayList<String> m_Type) {        this.m_Type = m_Type;    }    public static String getSeryType() {        return SeryType;    }    public void addLegendValue(String legendValue)    {        m_LegendData.add(legendValue);    }    public ArrayList<String> getLegendData()    {        return m_LegendData;    }    public  void setLegendData(ArrayList<String> legendData)    {        m_LegendData = legendData;    }    public void addXAxisValue(String xAxisValue)    {        m_xAxisData.add(xAxisValue);    }    public ArrayList<String> getXAxisData()    {        return m_xAxisData;    }    public  void setXAxisData(ArrayList<String> xAxisData)    {        m_xAxisData = xAxisData;    }    public void addSeriesValue(ArrayList<String> seriesValue)    {        m_seriesData.add(seriesValue);    }    public ArrayList<ArrayList<String>> getSeriesData()    {        return m_seriesData;    }    public  void setSeriesData(ArrayList<ArrayList<String>> seriesData)    {        m_seriesData = seriesData;    }    public String GetJSONString()    {        String retJSON = new String();        retJSON += "{";        retJSON += "\""+Title+"\":"+"\""+m_Title+"\",";        retJSON += "\""+LegendData+"\":[";        for (int i = 0 ; i < m_LegendData.size();i++)        {            retJSON += "\"" + m_LegendData.get(i) +"\"";            if(i < m_LegendData.size()-1)                retJSON +=",";        }        retJSON +="],";        retJSON += "\""+XAxisData+"\":[";        for (int j = 0; j < m_xAxisData.size();j++)        {            retJSON += "\"" + m_xAxisData.get(j) +"\"";            if(j < m_xAxisData.size()-1)                retJSON +=",";        }        retJSON +="],";        retJSON +="\""+SeriesData+"\":";        retJSON +="[";        for (int k = 0;k < m_LegendData.size();k++)        {            ArrayList<String> seryData = m_seriesData.get(k);            retJSON +="{";            retJSON += "\""+SeryType +"\":\""+m_Type.get(k)+"\",";            retJSON += "\""+SeryName +"\":\""+m_LegendData.get(k)+"\",";            if(m_Type.get(k).equals(SeryType_Line)){                retJSON +=  "\""+"yAxisIndex" +"\":\""+"1"+"\",";            }            retJSON += "\""+SeryData+"\":[";            for (int l = 0; l < seryData.size();l++)            {                retJSON += "\"" + seryData.get(l) +"\"";                if(l < seryData.size()-1)                    retJSON +=",";            }            retJSON +="]";            retJSON +="}";            if(k < m_LegendData.size()-1)                retJSON+=",";        }        retJSON +="]";        retJSON += "}";        return retJSON;    }}

好了,可以试试了

原创粉丝点击