赞
踩
ECharts 是由百度开发提供的开源框架,主要提供给Web使用,所以Android中一般使用WebView加载显示,其实本质上也就是用 WebView 加载本地 H5。
下载插件:
官网下载:
https://echarts.apache.org/zh/download.html
git下载
https://github.com/apache/incubator-echarts/tree/4.7.0/
我是从git下载的
下载完成后,在main目录下新建assets文件夹,从下载文件中找到echarts.min.js文件,复制到libs中
incubator-echarts-4.7.0\incubator-echarts-4.7.0\dist\echarts.min.js
下面配图错了,把libs换成assets
ctrl+shift+alt+s
依赖添加好之后会出现:
打开app/gradle build文件,查看
echarts.html文件,并将echarts.html放入assets目录。
<!DOCTYPE html> <html style="height: 100%"> <head> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta charset="utf-8"> </head> <body style="height: 100%; margin: 0"> <div id="container" style="height: 100%"></div> <script type="text/javascript" src="./echarts.min.js"></script> <script type="text/javascript"> var dom =document.getElementById("container"); var myChart =echarts.init(dom); var app ={ }; function loadEcharts(echartJson){ var option = JSON.parse(echartJson); if (option &&typeof option ==="object") { myChart.setOption(option,true); } } </script> </body> </html>
在andorid中使用ECharts,一般来讲我们有两种实现方案
使用第一种方案,已经有大神帮我们做好最困难的数据封装工作:
打开app/gradle build文件,添加
implementation 'com.github.abel533:ECharts:3.0.0.2'
项目地址https://github.com/abel533/ECharts
相关配置已经配置好了之后,开始尝试
因为Echarts需要在WebView中显示,所以我们直接自定义一个EchartView继承自WebView用来显示图表。
EchartView 就相当于一个封装的WebView,操作都基本和WebView相同
import android.content.Context; import android.util.AttributeSet; import android.webkit.WebSettings; import android.webkit.WebView; import com.github.abel533.echarts.json.GsonOption; public class EChartView extends WebView { private static final String TAG = EChartView.class.getSimpleName(); public EChartView(Context context) { this(context, null); } public EChartView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public EChartView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { //EChartView其实就是WebView,对WebView的配置也要对EChartView进行相应的配置 WebSettings webSettings = getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setSupportZoom(false); webSettings.setDisplayZoomControls(false); loadUrl("file:///android_asset/echarts.html"); } /**刷新图表 * java调用js的loadEcharts方法刷新echart * 不能在第一时间就用此方法来显示图表,因为第一时间html的标签还未加载完成,不能获取到标签值 * @param option */ public void refreshEchartsWithOption(GsonOption option) { if (option == null) { return; } String optionString = option.toString(); String call = "javascript:loadEcharts('" + optionString + "')"; loadUrl(call); } }
将EChartsView在布局中显示出来,用来显示图表
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.example.test.EChartView
android:id="@+id/lineChart"
android:layout_width="400dp"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_gravity="center">
</com.example.test.EChartView>
</LinearLayout>
EChart里面最重要的就是option了,图表所有的配置都在option中
Android想要使用ECharts,就必须要将option中的数据进行封装,
EChartOptionUtil 就是用来将数据封装为option,这里只封装了一个简单的折线图做例子。
import com.github.abel533.echarts.axis.CategoryAxis; import com.github.abel533.echarts.axis.ValueAxis; import com.github.abel533.echarts.code.Trigger; import com.github.abel533.echarts.json.GsonOption; import com.github.abel533.echarts.series.Line; public class EChartOptionUtil { /** * 画折线图 * * @param xAxis x轴的相关配置 * @param yAxis y轴的相关配置 * @return */ public static GsonOption getLineChartOptions(Object[] xAxis, Object[] yAxis) { //通过option指定图表的配置项和数据 GsonOption option = new GsonOption(); option.title("折线图");//折线图的标题 option.legend("销量");//添加图例 option.tooltip().trigger(Trigger.axis);//提示框(详见tooltip),鼠标悬浮交互时的信息提示 ValueAxis valueAxis = new ValueAxis(); option.yAxis(valueAxis);//添加y轴 CategoryAxis categorxAxis = new CategoryAxis(); categorxAxis.axisLine().onZero(false);//坐标轴线,默认显示,属性show控制显示与否,属性lineStyle(详见lineStyle)控制线条样式 categorxAxis.boundaryGap(true); categorxAxis.data(xAxis);//添加坐标轴的类目属性 option.xAxis(categorxAxis);//x轴为类目轴 Line line = new Line(); //设置折线的相关属性 line.smooth(true).name("销量").data(yAxis).itemStyle().normal().lineStyle().shadowColor("rgba(0,0,0,0.4)"); //添加数据,将数据添加到option中 option.series(line); return option; } }
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。