这个图表需要多值数据源,和上一篇文章中的单一数据源的区别是android中需要打包的数据data不同,而且还需提供一个相应的data_labels数据。

先把做出来的效果图贴出来:

[置顶] 基于ichartjs图形库在android上使用HTML动态实现多数据源的面积图_第1张图片

1、android主界面代码:

package com.sq.Htmldemo;import java.util.Vector;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;import android.webkit.WebSettings;import android.webkit.WebView;public class MainActivity extends Activity {private WebView web;private WebSettings webSettings;private Vector<Item> chart = new Vector<Item>();private Parameter parameter = new Parameter(950, 450, "通信");private String data;private String data_labels;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //        this.initContact();        this.initContacts();                web = (WebView)findViewById(R.id.web);        webSettings = web.getSettings();        webSettings.setJavaScriptEnabled(true); //设定该WebView可以执行JavaScript程序        webSettings.setBuiltInZoomControls(true); //设定该WebView可以缩放        web.addJavascriptInterface(this, "mainActivity");        //        web.loadUrl("file:///android_asset/Column3D.html");//        data = PackageChartData.PackageData(chart);                web.loadUrl("file:///android_asset/Area2D.html");        data = PackageChartData.PackageDoubleData(chart);        data_labels = PackageChartData.PackageDataLabels(new String[]{"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"});                Log.i("test", "data:"+data);        Log.i("test", "data_labels:"+data_labels);    }    /**     * 初始化图标要显示的内容,存放在chart中,单一数据类型的     */    public void initContact() {    Item item = new Item();    item.setName("移动");    item.setValue(40);    item.setColor("#bc6666");    chart.add(item);    Item item1 = new Item();    item1.setName("联通");    item1.setColor("#6f83a5");    item1.setValue(20);    chart.add(item1);    Item item2 = new Item();    item2.setName("电信");    item2.setColor("#76a871");    item2.setValue(30);    chart.add(item2);    }        /**     * 初始化图标要显示的内容,存放在chart中,多值数据类型的     */    public void initContacts() {    Item item = new Item();    item.setName("上海");    item.setValues(new double[]{4,16,18,24,32,36,38,38,36,26,20,14});    item.setColor("#dad81f");    chart.add(item);    Item item1 = new Item();    item1.setName("北京");    item1.setValues(new double[]{8,12,14,20,26,28,30,26,28,20,16,10});    item1.setColor("#1f7e92");    chart.add(item1);    }        /**     * 该方法将在js脚本中,通过window.mainActivity.getContact()进行调用,得到图表显示所需的JSON格式的data     * @return     */    public String getContact(){    Log.i("test", "get data:"+data);    return data;    }        /**     * 该方法将在js脚本中,通过window.mainActivity.getContactLabels()进行调用,得到图表显示所需的JSON格式的data_labels     * @return     */    public String getContactLabels() {    Log.i("test", "get data_labels:"+data_labels);    return data_labels;}        /**     * 该方法将在js脚本中,通过window.mainActivity.getContacts()进行调用     * 返回的JavaArrayJSWrapper对象可以使得在js中访问Java数组     * @return     */    public JavaArrayJSWrapper getContacts(){    Log.i("test", "getContacts execute!");    Item[] contacts = new Item[this.chart.size()];    contacts = this.chart.toArray(contacts);    return new JavaArrayJSWrapper(contacts);    }        /**     * 该方法将在js脚本中,通过window.mainActivity.getWidth()进行调用     * 得到图表的宽度     * @return int     */    public int getWidth(){    return parameter.getWidth();    }        /**     * 该方法将在js脚本中,通过window.mainActivity.getHeight()进行调用     * 得到图表的高度     * @return int     */    public int getHeight(){    return parameter.getHeight();    }        public String getChartTitle(){    return parameter.getTitle();    }        /**     * 用于调试的方法,该方法将在js脚本中,通过window.mainActivity.debugOut(“”)进行调用     * @param out     */    public void debugOut(String out) {// TODO Auto-generated method stub    Log.i("test", "debugOut:" + out);}        @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }}

2、AreaD.html文件源码:

<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>多数据源的面积图</title><meta name="Description" content="" /><meta name="Keywords" content="" /><script type="text/javascript" src="ichart-1.0.beta.min.js"></script><script type="text/javascript" >    $(function(){    var data = new Array();        var data_labels = new Array();var contact = window.mainActivity.getContact();var contact_lab = window.mainActivity.getContactLabels();eval('data='+contact);window.mainActivity.debugOut("data="+data); eval('data_labels='+window.mainActivity.getContactLabels());window.mainActivity.debugOut("data_labels="+data_labels); new iChart.Area2D({render : 'canvasDiv',data: data,title : 'Average Temperature Of 2012',width : 800,height : 400,legend : {enable : true},tip:{enable : true},listeners:{parseTipText:function(d,t,i){return data_labels[i]+"份平均温度:"+t+"℃";}},coordinate:{scale:[{ position:'left', start_scale:0, end_scale:40, scale_space:5, listeners:{parseText:function(t,x,y){return {text:t+"℃"}}}},{ position:'bottom', start_scale:1, end_scale:12, parseText:function(t,x,y){return {textY:y+10} }, labels:data_labels}]}}).draw();});</script></head><body ><div id='canvasDiv'></div></body></html>

3、用于将data打包JSON格式的PackageChartData类:

package com.sq.Htmldemo;import java.util.Vector;import org.json.JSONArray;import org.json.JSONObject;public class PackageChartData {/** * 将单一数据源打包成JSON格式 * @param chartData 存储单一数据源的数组 * @return */public static String PackageData(Vector<Item> chartData){JSONArray root = new JSONArray();try {for(int i = 0; i < chartData.size(); ++i){JSONObject temp = new JSONObject();temp.put("name", chartData.get(i).getName());temp.put("value", chartData.get(i).getValue());temp.put("color", chartData.get(i).getColor());root.put(temp);}} catch (Exception e) {e.printStackTrace();}return root.toString();}/** * 将多值数据源打包成JSON格式 * @param chartData * @return */public static String PackageDoubleData(Vector<Item> chartData){JSONArray root = new JSONArray();try {for(int i = 0; i < chartData.size(); ++i){JSONObject temp = new JSONObject();temp.put("name", chartData.get(i).getName());JSONArray values = new JSONArray();for(int j = 0; j < chartData.get(i).getValues().length; ++j){values.put(chartData.get(i).getValues()[j]);}temp.put("value", values);temp.put("color", chartData.get(i).getColor());root.put(temp);}} catch (Exception e) {e.printStackTrace();}return root.toString();}/** * 将多值数据源相应的data_labels打包成JSON格式 * @param dataLabels * @return */public static String PackageDataLabels(String[] dataLabels){JSONArray root = new JSONArray();try {for(int i = 0; i < dataLabels.length; ++i){root.put(dataLabels[i]);}} catch (Exception e) {e.printStackTrace();}return root.toString();}}


更多相关文章

  1. 安卓(android)建立项目时失败,出现Android Manifest.xml file missi
  2. Android——Listview不用notifydatasetchanged更新数据的方法
  3. Android中两种使用Animation的方法
  4. 详解Android aidl的使用方法
  5. Android中自定义标题栏样式的两种方法
  6. Genymotion Android模拟器下载和找不到模拟器解决方法
  7. Android app闪退后fragment重叠bug解决方法
  8. zz:Android 测试工具Monkey & Monkeyrunner 使用方法
  9. Android 完全退出当前应用程序的四种正确方法

随机推荐

  1. Android(安卓)WheelView(滑轮组件)使用
  2. Android性能优化——合理进行内存管理
  3. Android(安卓)DownloadManager下载状态查
  4. PendingIntent实现原理和代码
  5. 快速了解Android(安卓)onMeasure() onLay
  6. 什么是AIDL
  7. 如何实现Android(安卓)布局背景模糊化处
  8. Android打开系统设置界面
  9. android计数器――基础编
  10. Android静态注册广播receiver检测WIFI连