Android 中使用 ichartjs 完成圖表的展示

jopen 11年前發布 | 47K 次閱讀 Android 圖表/報表制作

 Android 中使用 ichartjs 完成圖表的展示

  1. http://www.ichartjs.com/

   ichartjs 是一款基于HTML5的圖形庫。使用純javascript語言, 利用HTML5的canvas標簽繪制各式圖形.ichartjs致力于為您的應用提供簡單、直觀、可交互的體驗級圖表組件。是WEB/APP圖表展示方面的解決方案  ichartjs目前支持餅圖、環形圖、折線圖、面積圖、柱形圖、條形圖。ichartjs是基于Apache License 2.0協議的開源項目。

 2. 下載ichartjs放入android工程中如下圖所示位置:<br>
    2.png

  

 3. 新建一個html文件:index.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no" target-densitydpi="device-dpi"/>
    <title>Document</title>
    <script src="file:///android_asset/ichart.1.2.min.js" type="text/javascript" charset="utf-8" > </script>
    <script type="text/javascript" charset="utf-8" >
    </script>
</head>

<body onload="javascript:myObject.init()">
    <div id='canvasDiv'></div>
</body>

<script type="text/javascript" charset="utf-8" >

    var mdata;
    var w;
    var h;

     function setContactInfo(data)  
     {  
            mdata= eval(data);   //通過eval方法處理得到json對象數組  
            w=window.myObject.getW();
            h=window.myObject.getH();
            execute();
     }

     function execute(){    
        var chart = new iChart.Column2D({
            render : 'canvasDiv',//渲染的Dom目標,canvasDiv為Dom的ID
            data: mdata,//綁定數據
            width : w,//設置寬度,默認單位為px
            height : h-40,//設置高度,默認單位為px
            // shadow:true,//激活陰影
            // shadow_color:'#c7c7c7',//設置陰影顏色
            border:0,
            animation_timing_function:'easeIn',
            coordinate:{//配置自定義坐標軸
                scale:[{//配置自定義值軸
                     position:'left',//配置左值軸    
                     start_scale:0,//設置開始刻度為0
                     end_scale:26,//設置結束刻度為26
                     scale_space:2,//設置刻度間距
                     listeners:{//配置事件
                        parseText:function(t,x,y){//設置解析值軸文本
                            return {text:t+" cm"}
                        }
                    }
                }]
            },
            sub_option:{
                listeners:{         
                    click:function(r,e,m){
                        window.myObject.setValue(r.get('name'),r.get('value'));
                    }
                }
            }
        });
        //調用繪圖方法開始繪圖
        chart.draw();
    }


    </script>
</html>

    4.在activity中對webview做一些簡單的設置

       @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.webView1);

        webView.setHorizontalScrollBarEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);

        WebSettings settings = webView.getSettings();

        // 設置字符集編碼
        settings.setDefaultTextEncodingName("UTF-8");
        settings.setPluginsEnabled(true);
        // 開啟JavaScript支持
        settings.setJavaScriptEnabled(true);
        settings.setSupportZoom(true);
        settings.setBuiltInZoomControls(true);
        webView.addJavascriptInterface(new JSinterface(this, handler, webView), "myObject");
        // 加載assets目錄下的文件
        String url = "file:///android_asset/index.html";
        webView.loadUrl(url);
    }

 5.最為關鍵的,js與java代碼之間的交互

package com.chart.test;

import java.util.Random;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;

class JSinterface {

    private Context     mContext    = null;
    private Handler     mHandler    = null;
    private WebView     mView;

    private JSONArray   jsonArray   = new JSONArray();
    private Random      random      = new Random();

    public JSinterface(Context context, Handler handler, WebView webView) {
        mContext = context;
        mHandler = handler;
        mView = webView;
    }

    public void init() {
        // 通過handler來確保init方法的執行在主線程中
        mHandler.post(new Runnable() {

            public void run() {
                // 調用客戶端setContactInfo方法
                mView.loadUrl("javascript:setContactInfo('" + getJsonStr() + "')");
            }
        });
    }

    public int getW() {
        return px2dip(mContext.getResources().getDisplayMetrics().widthPixels);
    }

    public int getH() {
        return px2dip(mContext.getResources().getDisplayMetrics().heightPixels);
    }

    public int px2dip(float pxValue) {
        final float scale = mContext.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    public void setValue(String name, String value) {
        Toast.makeText(mContext, name+" "+value+"%", Toast.LENGTH_SHORT).show();
    }

    public String getRandColorCode() {
        String r, g, b;
        Random random = new Random();
        r = Integer.toHexString(random.nextInt(256)).toUpperCase();
        g = Integer.toHexString(random.nextInt(256)).toUpperCase();
        b = Integer.toHexString(random.nextInt(256)).toUpperCase();

        r = r.length() == 1 ? "0" + r : r;
        g = g.length() == 1 ? "0" + g : g;
        b = b.length() == 1 ? "0" + b : b;

        return "#" + r + g + b;
    }

    public String getJsonStr() {
        try {

            for (int i = 0; i < 10; i++) {
                JSONObject object1 = new JSONObject();
                object1.put("name", "name" + i);
                object1.put("value", random.nextInt(30));
                object1.put("color", getRandColorCode());
                jsonArray.put(object1);
            }
            Log.i("", jsonArray.toString());
            return jsonArray.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
}

  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!