個人Android進階之旅------>【強力推薦】Android開源圖表庫XCL-Charts版本發佈及展現頁

         由於要作圖表相關的應用,後來百度發現了一個很好的Android開源圖表庫(XCL-Charts is a free charting library for Android platform.)css

                     下面內容轉載於:http://blog.csdn.net/xcl168/article/details/29675613,詳細介紹了XCL-Charts的展現內容。html

 

====================================================================================XCL-Charts V2.4java

        Android開源圖表庫(XCL-Charts is a free charting library for Android platform.)git

        XCL-Charts基於原生的Canvas來繪製各類圖表,在設計時,儘可能在保證開發效率的同時,給使用者提供足夠多的定製化能力。github

所以使用簡便,同時具備至關靈活的定製能力。
         目前支持(
3D/非3D,背向式/橫向/豎向)柱形圖(Bar Chart)、3D/非3D餅圖(Pie Chart)、堆疊圖(Stacked Bar Chart)、面積圖(Area Chart)、
 折線圖(Line Chart)、曲線圖(Spline Chart)、環形圖(Dount Chart)、南丁格爾玫瑰圖(Rose Chart)、儀表盤(Dial Chart)、刻度盤(Gauge Chart)、 雷達圖(Radar Chart)、圓形圖(Circle Chart)弧線比較圖範圍條形圖(RangeBar Chart)氣泡圖(Bubble Chart)散點圖(Scatter Chart)玫瑰風向圖(Wind Rose)、漏斗圖(Funnel Chart) 象限圖
等圖表。
web

        其它特性還包括支持手勢縮放、圖表滑動、點擊交互、多圖疊加、圖表批註、動畫效果、多XY軸顯示、軸線任意方位顯示、動態圖例、圖表參考線、柱圖刻度居中風格切換、混合圖表及同數據源圖表類型切換等。算法

Licensecanvas

      採用Apache v2 License開源協議。app

GitHub上的代碼託管地址:ide

 https://github.com/xcltapestry/XCL-Charts

  QQ羣: 374780627

 開源中國的收錄地址: http://www.oschina.net/p/xcl-charts


   爲何會有這個庫?

         之因此有這個庫,是由於前段時間學習Canvas時研究了一下各類圖的實現方式,後面想一想或許能夠本身整理成一個圖表庫。 就利用下班時間敲代碼,造成了如今這個圖表庫XCL-Charts。很麻煩,由於期間我還有別的項目要寫。不過總算整理得能跑了。 

        因此XCL-Charts對我來講是個純興趣項目,純練手用的,我不是搞Android的,因此在工做中也用不到這個。 但沒想到的是,到今天爲止,能作到如今這種程度,已大大出乎我本身的預料了。只能說,有時寫代碼是有慣性的,停都停不下來。


   關於庫的一些東西:

    1.  基於原生的庫

         以前看好多人是用Webview調用js庫來畫圖,而XCL-Charts是直接利用原生Canvas 相關函數畫出圖形,固然,這各有好處,

         但基於原生的在速度和可操做性仍是有優點的,並且也無須你再去對web作啥研究。

    2 .  開放,自由,高定製性的庫

                     XCL-Chart儘可能把圖的繪製邏輯封裝在類中,而把繪製相關的各個基礎元素開放出來,若是用過的人會發現,

           我分門別類開放了大量的Paint畫筆類及其它函數, 供使用者去定製圖的各類屬性功能...... 

                     結果出現了這種狀況:不少人問怎麼找不到改文字大小的函數,改顏色的函數......之類問題。

                      親們,沒發現我把Android強大的Paint類都已經開放給大家了?裏面有着大量現成的這些函數,有現成的我何須還要再封裝一遍呢?

            同時我都把Paint類開放給大家了, 就至關於提供了無限的改造性。

打開枷鎖,把那些封裝弱弱的庫丟一邊去吧。 你要習慣擁有這麼大的自由度, 自由很美好。

       3.  庫的設計想法

             有網友曾經問過我一個問題, 這麼多圖,這麼多代碼,怎麼沒有看到繼承哪一個view? 只傳了個draw中的canvas進來??

                        是的,確實庫只傳了一個canvas進來,那麼多代碼都是圍着這個canvas來作的。 

                        由於我更偏向於作一個基類庫,一個產生圖表的組件庫。

           我認爲繪圖與view 應當作適當的隔離,讓你們各自作各家的事,而不是混在一塊兒糾纏不清。 

           若是圖表須要做交互,響應一些view的事件,圖庫提供一些相關的接口給view去調用,或經過一些技巧再去相互組合,這樣更加靈活。

           並且現有方式在處理混合圖時,再多的圖均可以調用圖類,在同一塊canvas上一層層的畫。 對那種一個view對應一種圖類型封裝的形式真不太感冒。                       

      4. 庫如今支持多少種圖

               今天加函數時數了數,目前大大小小有18種圖。驚訝 。不知不覺弄出這麼多種類的圖出來了。

      5. 功能需求

                特殊功能需求,要是能本身動手的,你們本身動手吧。我一般只加本身認爲有意思的東東,再說精力實在也有限。

      6.bug,代碼抽取

                 發現bug,歡迎動手提交修正。  

                 但對於只知道從庫裏抽取代碼出來人。不要光索取,請記得還有回饋這回事。

       7.開源有沒有用?

                 開源也有段時間了,到底有沒有用呢? 結論是有用,能收集到一堆的需求,五花八門,如今的app真是爲了界面無所不用。 參考這些需求,能進一步

         完善這個項目。 但暫時就真正用改bug,加功能等方式參與進來的,屈指可數。因此就敲代碼這個活而言,開源對個人幫助有,

         但沒想象中的那麼大。 不過無所謂了,這玩意原本就是本身圖寫個爽。

                對於真正有用代碼方式參與的,我都有在代碼和Demo的about中有寫上他們的網名,確實很感謝他們。 還有一羣兄弟有些由於各類緣由

         沒實際參與代碼編寫, 不過他們用其它方式也算參與進來了,不少從開始到如今一直在關注,真的很不錯。這也算是開源的另外一種收穫了。

           

    Demo工程中附帶的部份圖表例子:  

   

  

 



           


                       


       


   

   

   

    

   

      

     

      

   

      

       

  

 

   

     

        

     

  



====================================================================================

 

XCL-Charts圖表庫簡要教程及常見問題

 

PS:如下內容轉載於:http://blog.csdn.net/xcl168/article/details/42318669

 

這個Andriod圖表庫項目從開始至如今,熱情消耗幾近殆盡。還好已基本實現我想作的那些東西。趁還剩下點興趣,把一些點很是簡單的概括一下。

      

所支持的圖表類型:

   基類                            圖表名稱

   BarChart                橫/豎向柱形圖及背向式柱形圖

   BarChart3D           橫/豎向3D柱形圖

   StackBarChart      橫/豎向堆疊式柱形圖

   RangeBarChart    範圍柱形圖  

    LineChart        折線圖

   SplineChart      曲線圖

   AreaChart         區域圖(折線/平滑)

   PieChart           餅圖

   PieChart3D     3D餅圖

   DountChart      環形圖

   ArcLineChart   弧線比較圖

   RoseChart       南丁格爾玫瑰圖/玫瑰風向圖

   FunnelChart    漏斗圖

   CircleChart      圓/半圓圖

   BubbleChart    氣泡圖

   RadarChart     雷達圖

   GaugeChart    刻度盤

   ScatterChart    散點圖

   DialChart         儀表盤


 




 主要組成(附註:不少命名都是我本身亂命名的,專業的不用太較真,能實現效果就好。)

圖表範圍:

    即圖中藍色漸變背景所在的範圍。

   設置函數:

   setChartRange(float width, float height)
   setChartRange(float startX, float startY, float width, float height)    

   

繪圖區:

   圖中黃色部分的範圍。

   可用下面函數設置繪圖區與整個圖表範圍的縮收間距:

   setPadding(float left, float top, float right, float bottom)   

   getPlotArea()

   如數據量太多,屏幕顯示不下時,可經過getPlotArea().extWidth()來擴大範圍,經過手勢滑動來查看。

    

標題欄:

   分主標題與子標題

   部份函數:

   setTitle(java.lang.String title)
   addSubtitle(java.lang.String subtitle)


座標軸:

軸分兩種數據軸與分類軸,軸能夠顯示在上下左右中位置,或依數據值顯示在任意位置。

   引用函數:

  getDataAxis()
  getCategoryAxis()


軸標題:

     可設置上下底部三個部份的標題

     引用函數:

getAxisTitle()


圖例:

   可設置成行或列模式,並顯示在圖表中任意位置。

   部份函數:

    getPlotLegend()


動態圖例:

   能夠作各類圖表說明的補充。

  引用函數:

   getDyLegend()

    

定製線

   用於作各類標示或分界線。

   設置函數:

   setCustomLines()


圖批註

   用於在顯示時,在圖表指定元素上特別標識時使用。

   設置函數:

   setAnchorDataPoint()


焦點框

   在點擊選中時,標識出當前選中項。

   激活函數:

    showClikedFocus();


焦點線(動態線):

  用於在點擊時顯示相關的十字線等其它標識線。

   showDyLine() 激活。

   getDyLine()   獲取相關對象。


圖表縮放:

   disableScale()  禁用

   enabledScale() 啓用


手勢滑動

   disablePanMode() 禁用

   enabledPanMode() 啓用

   setPlotPanMode() 設置滑動模式(上下/左右/任意方向)


常見問題:

 1.  沒找到設置顏色的函數.

       找到相關子類的畫筆,自行設置顏色便可。

      如設置軸線的顏色: 

                chart.getDataAxis().getAxisPaint().setColor(Color.BLUE);


 2. 字體大小沒有隨着屏幕大小變化

      自行依屏幕大小設置相關子類畫筆的字體大小便可.

      如,設置圖表主標題字體大小:

           chart.getPlotTitle().getTitlePaint().setTextSize(22);


 3. 隱藏軸線或軸上的刻度/標籤

          以數據軸爲例:

       chart.getDataAxis().hideAxisLine();
chart.getDataAxis().hideTickMarks();
chart.getDataAxis().hideAxisLabels();

         分類軸同理.


4. 如何設置軸或圖表對象上的顯示格式:

          圖庫有提供相關回調函數,自行實現便可.

          一個簡單的例子代碼:           

  1. //定義數據軸標籤顯示格式   
  2.             chart.getDataAxis().setLabelFormatter(new IFormatterTextCallBack(){  
  3.       
  4.                 @Override  
  5.                 public String textFormatter(String value) {  
  6.                     // TODO Auto-generated method stub         
  7.                     Double tmp = Double.parseDouble(value);  
  8.                     DecimalFormat df=new DecimalFormat("#0");  
  9.                     String label = df.format(tmp).toString();                 
  10.                     return (label);  
  11.                 }  
  12.                   
  13.             });  

     其它依此類推。


  5. 若是從Activity向view中的圖傳值,刷新

       一個簡單的同時刷新兩個曲線圖的例子:          

  1. Activity:  
  2.    chartView.refreshChart(linePoint1, linePoint2);        
  3. View:  
  4.    public void refreshChart( List<PointD> linePoint1,  
  5.                              List<PointD> linePoint2){  
  6.           
  7.         dataSeries1.setLineDataSet(linePoint1);  
  8.         dataSeries2.setLineDataSet(linePoint2);  
  9.         this.invalidate();  
  10.     }  

         

  6. 雙Y軸怎麼處理

      多圖疊加便可。參考下Demo中的混合圖例子。


  7. 須要柱形圖與折線圖合在一塊兒顯示 

    多圖疊加便可。參考下Demo中的混合圖例子。


 8. 須要特別標識某一個點或值

    使用圖批註便可。


9. 須要顯示這種或那種動畫效果

    可參考Demo中一些例子的動畫,如漸顯,由遠及近等來本身實現,也可調用第三方庫來作。


10. 可否設置柱形寬度

   柱形大小是依繪圖區寬度及柱形個數自動設置的,不能顯式指定。


11. 圖表移出繪圖區範圍不見了。

    目前是任意移動,可以使用hscrollview來作。可參考相關例子

  

12. 數據量很大,滑動時速度慢

      如不需點擊和縮放效果,可以使用hscrollview來作,不然可以使用disableHighPrecision()來提升性能。

   但這個函數餅圖類圖表慎用。


13. 怎麼在Activity中,獲得圖表的點擊對象和相關值

     可參考Demo,有相關演示。


14. 溫度計軸/不等距軸怎麼作?

     XCL-Charts目前不支持,但幸虧大S寫了一個經典實現,在網友圖表庫目錄下。


15. 區域圖有沒漸變效果。

      有,可指定漸變起始和結束色,從上到下或從左至右漸變。


16. 圖例要顯示在下方或左右。

     有相關函數,直接設置便可。Demo中有相關例子。


17. 有個軸要顯示在頂部

    有相關屬性,直接設置便可。Demo中有相關例子。


18. 折線圖左右滑動的例子

     兩個View,一個view用於顯示Y軸,圖標題,圖例,另外一個用於顯示scrollview及圖表。


 19. Y軸標題顯示在頂部,X軸標題顯示在右下

     兩種方式,要麼參考Demo中「豎向定製線柱形圖"例子的作法。

      要麼在view的render()中,經過 chart.getPlotArea().getLeft()及chart.getPlotArea().getTop()等函數獲得相關座標,

     直接drawText便可。


 20. 點擊時選中不夠靈敏,怎麼辦?

    利用extPointClickRange(10); 擴大選中範圍便可。


21.手勢移動時,軸標籤已移出繪圖區範圍了仍顯示。

          有提供相關函數來控制,移出後的顯示範圍,以X方向爲例:

                     //平移時收縮下
float margin = DensityUtil.dip2px(getContext(), 20);
chart.setXTickMarksOffsetMargin(margin);

      Y方向依上例類推。


22. 餅圖標籤折線從扇區邊上起始延伸出來。

       直接設置折線線起始點便可。chart.getLabelBrokenLine().setBrokenStartPoint(10f); 值爲0-10的比例。


23. 餅圖標籤和線與扇區要相同顏色.

     chart.syncLabelLineColor()便可。


24. 餅圖數據傳進去有空隙或不顯示?

   Java的float和double類型在計算時會有偏差。形成圓心角合計小於或超出360度。

    建議調用庫中的Mathhelper類中的相關函數來作計算處理。


25. 餅圖標籤太密,看不清。

        太密集的標籤不重疊的處理算法還沒興趣去研究, 但庫已提供了5,6種標籤顯示風格。建議不一樣扇區依角大小錯開,

  並不一樣扇區指定不一樣標籤顯示風格來處理。


26.我須要多圖同步,並定時刷新數據。

    Demo中有,可參考雙線圖的例子。


27. 從哪能夠下載源碼

     https://github.com/xcltapestry/XCL-Charts


28. 下載後怎麼這麼多叉。

    從新導入一下 xclcharts.jar便可。


29.怎麼有兩個工程。

     xcl-charts是生成jar的工程

     xcl-charts-demo 是用來演示的工程。


30 怎麼在xml中放圖表,在ChartsActivity中全是代碼生成的。

    親,還有其它不少例子是將view放在xml中的。別老盯着ChartsActivity一個。


31. 線上的點或線太大或過小,怎麼調?

   有相關函數設置半徑

       /設置線上點的大小
       line6.setDotRadius(15)
//設置線的粗線
line6.getLinePaint().setStrokeWidth(5);


32. 多條線在一塊兒時,標籤重疊。

    數據源是無法管控的,能夠給不一樣線設置不一樣風格和旋轉角度,標籤的位置也是

    能夠調的,能夠有些顯示在上面,有些顯示在點下面。


33.怎麼一下佔這麼多內存。

   爲了方面掛演示例子,僅ChartsActivity就一次生成了40多個view。你單挑試試,雖然由於定製性強,因此選項多,

但哥們當初也用了很多優化內存手段的。


34.細類好多。

   嗯,由於我野心比較大,封裝好零件,之後無任想加什麼圖,只需關注圖自己的實現邏輯便可。

   哥搭的是一套Android繪圖的基礎平臺,而不是僅僅只畫的某一類圖。

   再說一句,用Java寫代碼就囉嗦,我如今很喜歡Golang。


35.羣主,庫的設計思想是什麼?

    不知道怎麼回答。 我只想到幾個,圖效果要炫,定製性要高,調用要靈活,對複雜圖能經過圖組合疊加來實現。

    全部零部件都要封裝好,這樣我之後加圖方便。


36.這庫的文檔在哪?

     doc目錄下有Javadoc可查函數和相關類信息。其它直接看Demo吧,目前有40幾個例子,你覺得我真很閒?


37. 羣主,請教一個aChartEngine問題

    抱歉,不會也沒使用過aChartEngine。曾瀏覽過源碼,很是經典,但不曾看懂過。


38. 幫看看MPAndroidChart的問題

        抱歉,沒研究過,但看過MPAndroidChart demo. 而後,我以爲我作得不少方面比這個更好。

    至少圖表表現方法和組合要更靈活,圖表種類也更多。


39. 我只想抽取你的部份代碼。

    滾。


40. 你不是要收手嗎?

   是的,說過不少次收手了。


41.柱形不想要漸變效果

     自行設置BarStyle便可

     chart.getBar().setBarStyle(XEnum.BarStyle.OUTLINE);


MAIL: xcl_168@aliyun.com

BLOG: http://blog.csdn.net/xcl168

相關文章
相關標籤/搜索