achartEngine可以的,在生成圖的過程中,有一個函數(shù)傳參數(shù)的時候記得它的兩個參數(shù)是設(shè)定折線的光滑度的,你看看文檔,絕對可以實現(xiàn)的,我之前做過。
目前創(chuàng)新互聯(lián)公司已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、銅陵網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
首先我們看看onDrwa 里面做了什么 從圖里面我們可看到 繪制的框線方法,繪制data線方法 繪制線上的圓
從最上面的圖效果來看我們不需要圓 也不需要折線,但是框線要保留 因此我們需要 把
這個幾個方法 改成public ,到時候繼承之后重寫他 不調(diào)用父方法即可
接下來我們創(chuàng)建一個 類繼承 DrawLineChart 重寫 DrawLineCircle,DrawLine 方法
這樣我們就保留 了框線, 取消了圓和折線的繪制
接下來在DrawLine 里面繪制曲線
code
/code
code
/code
code
/code
code
package com.app_chart;
/code
繪制曲線圖首先需要畫好橫豎坐標軸建立坐標系,比如坐標系中的100距離應(yīng)該在canvas中繪制多長,這個是需要計算的,其實坐標體系的建立是最復雜的,我看過很多第三方庫的建立方法都不一樣,有的要靈活一些,有的比較死板。至于繪制曲線要么是用Canvas.drawLine方法,要么是用Path.lineTo方法,看你自己的習慣。
為了做出一個外觀良好的曲線圖,我參考了兩個開源代碼,第一個的曲線圖繪制限制較多,使用范圍太窄,但是有數(shù)據(jù)變化時的動畫效果。第二個的適用范圍很廣,他能根據(jù)數(shù)據(jù)集合自動計算橫縱坐標的個數(shù),在canvas上單元格的距離,只需輸入坐標點就能自動建立坐標體系繪制曲線,但是沒有動畫效果。
先講第一個LineView。
LineView的demo可以在這里下載,lineview其實只是github項目的一部分,我是將其提取出來了的,個人覺得他的其他部分沒有參考價值。作者好像是個韓國人。
LineView的曲線繪制沒有什么可取的部分,我想學習的是他實現(xiàn)動畫效果的方法,設(shè)計的很好,但具體實現(xiàn)還需要改進,讓動畫更流暢。
Lineview的調(diào)用方法:
在xml中添加lineview控件
HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/horizontalScrollView"
android:layout_alignParentRight="true"
android:layout_above="@+id/line_button"
view
android:layout_width="wrap_content"
android:layout_height="200dp"
class="com.example.widget.LineView"
android:id="@+id/line_view"/
/HorizontalScrollView
在activity代碼中獲取lineview對象:
finalLineView lineView = (LineView)findViewById(R.id.line_view);
添加橫坐標:
int randomint = 9;
ArrayListStringtest =newArrayListString();
for (int i=0;irandomint; i++){
test.add(String.valueOf(i+1));
}
lineView.setBottomTextList(test);
允許繪制坐標點:
lineView.setDrawDotLine(true);
lineView.setShowPopup(LineView.SHOW_POPUPS_NONE);
ArrayListInteger dataList = newArrayListInteger();
intrandom = (int)(Math.random()*9+1);
for (int i=0;irandomint; i++){
dataList.add((int)(Math.random()*random));
}
添加縱坐標的值:
ArrayListArrayListIntegerdataLists = newArrayListArrayListInteger();
dataLists.add(dataList);
lineView.setDataList(dataLists);
從其用法中可以看出,lineview需要提前設(shè)定橫坐標的范圍,而且縱坐標的值必須和lineView.setBottomTextList(test)中添加的值一一對應(yīng)(讀lineview源碼可以知道),使用起來很不方便,我覺得作者僅僅是做出了一條曲線而已,而不太關(guān)注是否有用。和很多曲線圖的開源代碼一樣lineview允許一次繪制幾根顏色不同的曲線。
只需在上面的代碼中為dataLists再添加一個list成員就行。