014android初級(jí)篇之基于GraphView繪制統(tǒng)計(jì)圖表

在android的開發(fā)過程中,需要使用圖表,圖表有第三方的插件實(shí)現(xiàn)了該功能。目前有很多類似的功能插件,比如achartengine, Graphview等等。Graphview比較簡(jiǎn)潔,用起來簡(jiǎn)單,目前支持折線圖和條形圖圖表樣式。其他目前還沒有用過,今天的學(xué)習(xí)基于Graphview。

在項(xiàng)目中導(dǎo)入Graphview源碼模塊

如何導(dǎo)入可參考文章:013android初級(jí)篇之Android Studio 引用源碼模塊,jar及so文件

第一個(gè)簡(jiǎn)單程序

布局文件

<com.jjoe64.graphview.GraphView
        android:layout_width="match_parent"
        android:layout_height="200dip"
        android:id="@+id/graph" />

代碼

graph = (GraphView) findViewById(R.id.graph);
LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(new DataPoint[] {
        new DataPoint(0, 1),
        new DataPoint(1, 5),
        new DataPoint(2, -1),
        new DataPoint(3, 10),
        new DataPoint(4, 6),
        new DataPoint(5, 8),
        new DataPoint(4, 5)
});
graph.addSeries(series);

顯示的圖表橫軸和縱軸的值會(huì)根據(jù)輸入的數(shù)據(jù)而變化。

動(dòng)態(tài)修改數(shù)據(jù)

Graphview中提供了兩個(gè)接口來動(dòng)態(tài)修改數(shù)據(jù)

  1. resetData(DataPoint[] )
    這個(gè)方法將重置數(shù)據(jù),使用新的數(shù)據(jù)替代。

  2. public void appendData(E dataPoint,boolean scrollToEnd,int maxDataPoints)

    dataPoint - values the values must be in the correct order! x-value has to be ASC. First the lowest x value and at least the highest x value.
    scrollToEnd - true => 數(shù)據(jù)顯示的方向,是否從MaxX開始
    maxDataPoints - 保留的最多的數(shù)據(jù)節(jié)點(diǎn)個(gè)數(shù)

基本思想是

  1. 從加速傳感器中獲得動(dòng)態(tài)數(shù)據(jù);

  2. 在ui主線程中更新此數(shù)據(jù)

    graph.addSeries(series);
    graph.getViewport().setScalable(false);
    graph.setTitle("加速計(jì)");
    graph.getViewport().setMinX(0);
    graph.getViewport().setMaxX(200);

    graph.getViewport().setMinY(0);
    graph.getViewport().setMaxY(30);
    graph.getViewport().setYAxisBoundsManual(true);
    graph.getViewport().setYAxisBoundsManual(true);

利用Timer 定時(shí)更新數(shù)據(jù):

timer=new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            Message msg=mHandler.obtainMessage();
            msg.what=1;
            mHandler.sendMessage(msg);
            
        }
    },500,COLLECT_TIME);

使用后handle處理調(diào)用更新數(shù)據(jù):

mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg){
            super.handleMessage(msg);
            DataPoint[] values = new DataPoint[1];
            values[0] = new DataPoint(x,a);
            x++;
            series.appendData(values[0],true,200);

        }
    };

具體的定制,請(qǐng)參考鏈接中的相關(guān)資料

參考鏈接

  1. jjoe64/GraphView-Demos
  2. GraphView項(xiàng)目主頁
  3. GraphView項(xiàng)目源碼下載
  4. GraphViewAPI接口
  5. github開源Android組件資源整理(六)GraphView, UI Style
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,117評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,593評(píng)論 19 139
  • 你要知道,一個(gè)人的寶貴! 你要知道,一個(gè)人的污穢! 雖然罪人很丑陋,但愛很美! 有一種知道叫不知道 有一種認(rèn)識(shí)叫不...
    飽暖思家閱讀 180評(píng)論 0 0
  • 上回說到糗事百科段子的分析,今天對(duì)另外一張表,也就是用戶信息表的分析。 數(shù)據(jù)預(yù)處理 導(dǎo)入數(shù)據(jù) data1為段子信息...
    羅羅攀閱讀 1,205評(píng)論 12 11
  • 不知道為什么 好像每次都是這樣 本來是很開心的狀態(tài) 一個(gè)人走路都能笑出來聲音那種 然后就因?yàn)橐稽c(diǎn)又一點(diǎn)小事 慢慢冷...
    小雨微微的烏托邦閱讀 350評(píng)論 0 1

友情鏈接更多精彩內(nèi)容