天天看點

aChartEngine小結

        自學安卓和java有一段時間了,畢設用到什麼,就現學什麼,經常看别人部落格,今天還是第一次自己寫部落格。發現學程式設計還是要學會知識點小結,在這之前,也會在筆記本上做筆記,但慢慢發現,這種方式知識點架構太淩亂了,有的時候半天找不到這個知識點在哪本筆記本哪頁紙上,摘抄一些api效率也比較低,也沒有對知識點做更深層次的了解和總結,實作了功能就完事了,但感覺這樣下去不适合長期深遠發展。總之,嘗試換這種部落格總結知識點的方式繼續學習,希望自己堅持下去。對程式媛這行還是蠻喜歡的,因為總有那麼多的好心人,不懂的不會的,百度總是能找到啟發。

      廢話不多說,最近畢設用到畫各種圖,使用了achartengine的架構。在看了很多相關部落格的基礎上,按照自己的思路總結下:

       寫的比較好的部落格原文位址:

http://blog.csdn.net/shulianghan/article/details/38420197

http://www.cnblogs.com/zhangchaot/p/5892638.html

http://www.tuicool.com/articles/r6zMne

http://www.cnblogs.com/wangfeng520/p/5655767.html

http://blog.csdn.net/lk_blog/article/details/7645661

(1)原理架構

AChartEngine 運作示例圖 : 每個圖表都需要一個資料集 (Dataset) 和 渲染器集合 (Renderer);

-- 資料集 : 又由許多資料組成, 

-- 渲染器 : 也由不同的子渲染器組成, 

-- 擷取Activity 或 元件 : 圖表工廠 (ChartFactory) 通過調用 資料集 (Dataset) 和 渲染器集合 (Renderer) 可以生成帶圖表的 GraphicalView 或者 GraphicalActivity;

aChartEngine小結

XYSeries類:(x,y)點集    XYMultipleSeriesDataset類:多個 (x,y)組。資料集 3.org.achartengine.renderer    DefaultRenderer類:預設渲染器     XYMultipleSeries Renderer類:繼承上類,多XY點渲染器           setZoomButtonVisible(boolean)  放大縮小button    SimpleSeries Renderer類     XYSeries Renderer類:繼承上邊,         setDisplayChartValues(boolean)         setDisplayChartValueDistance(10) 4. org.achartengine    GraphicView類:繼承自View類,    ChartFactory類:各種圖表集合 5.AbstractDemoChart類:包含建立資料集合和渲染器的一些方法,是一個抽象類     addXYSeries( XYMultipleSeriesDataset,String[],List, List,int scale ):向dataset中加入多組坐标系。     buildDataset( String[],List, List ):傳回dataset對象。

    buildRenderer(int[] colors,PointStyle[] ):傳回渲染器執行個體。     setChartSettings:設定坐标系的參數,包括坐标系标題,X軸标題,Y軸标題,X,Y軸最大最小值,顔色。      buildDateDataset( String[],List, List ):傳回X軸是日期的dataset對象。

7.正常用法:    ①在layout xml檔案中留一塊LinearLayout用來放view。    ②在相應activity中用findviewbyid指定該layout對象;建立GraphicView對象,獲得 XYMultipleSeriesDataset, XYMultipleSeries Renderer對象,之後設定圖表格式setchartsetting;    ③ GraphicView對象=ChartFactory.getLineChartView(context,dataset,renderer)。    ④ LinearLayout.addView( GraphicView對象, new LayoutParams(FILL,FILL) )。

aChartEngine小結
aChartEngine小結
aChartEngine小結

(2)常用的知識點技巧

1、

//自定義X軸的字元串标簽
        String[] test = {"液位","壓力","氣耗量","真空度","加氣次數"};
        for(int i=;i<;i++){
            renderer.addXTextLabel(i+, test[i]);
        }
        
        //如果想要在X軸顯示自定義的标簽,那麼首先要設定renderer.setXLabels(0);  
        //如果不設定為0,那麼所設定的Labels會與原X坐标軸labels重疊
        renderer.setXLabels();                
for (int color : colors) {
17           SimpleSeriesRenderer r = new SimpleSeriesRenderer();
18           r.setColor(color);
19           renderer.addSeriesRenderer(r);
20         }
           
int[] colors={Color.BLUE,Color.GREEN,Color.MAGENTA,Color.RED};
2 DefaultRenderer renderer=buildCategoryRenderer(colors);      
protected DefaultRenderer buildCategoryRenderer(int[] colors) {
 2         DefaultRenderer renderer = new DefaultRenderer();
 3        
 4         renderer.setLegendTextSize(20);//設定左下角表注的文字大小
 5       //renderer.setZoomButtonsVisible(true);//設定顯示放大縮小按鈕  
 6         renderer.setZoomEnabled(false);//設定不允許放大縮小.  
 7           renderer.setChartTitleTextSize(30);//設定圖表标題的文字大小
 8           renderer.setChartTitle("統計結果");//設定圖表的标題  預設是居中頂部顯示
 9           renderer.setLabelsTextSize(20);//餅圖上标記文字的字型大小
10           //renderer.setLabelsColor(Color.WHITE);//餅圖上标記文字的顔色
11           renderer.setPanEnabled(false);//設定是否可以平移
12           //renderer.setDisplayValues(true);//是否顯示值
13           renderer.setClickEnabled(true);//設定是否可以被點選
14         renderer.setMargins(new int[] { 20, 30, 15,0 });
15         //margins - an array containing the margin size values, in this order: top, left, bottom, right
16         for (int color : colors) {
17           SimpleSeriesRenderer r = new SimpleSeriesRenderer();
18           r.setColor(color);
19           renderer.addSeriesRenderer(r);
20         }
21         return renderer;
22       }      
protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
 2             XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
 3             renderer.setAxisTitleTextSize(16);
 4             renderer.setChartTitleTextSize(20);
 5             renderer.setLabelsTextSize(15);
 6             renderer.setLegendTextSize(15);
 7             int length = colors.length;
 8             for (int i = 0; i < length; i++) {
 9                 SimpleSeriesRenderer r = new SimpleSeriesRenderer();
10                 r.setColor(colors[i]);
11                 renderer.addSeriesRenderer(r);
12             }
13             return renderer;
14         }
           
private void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {}      
private void setChartSettings(XYMultipleSeriesRenderer renderer,String title, String xTitle, String yTitle,      
double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) {}      
private XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) {}      
private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles  , List<double[]> xValues,       
List<double[]> yValues, int scale) {}      
使用      
setChartSettings(renderer, title, "", "", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);      
View view = ChartFactory.getLineChartView(this, buildDataset(titles, x, values), renderer);      
view.setBackgroundColor(Color.BLACK);      
餅狀圖      
protected DefaultRenderer buildCategoryRenderer(int[] colors) {}      
protected CategorySeries buildCategoryDataset(String title,  ArrayList<Information> list) {}      
// 餅狀圖文字資訊和對應的百分比
View view = ChartFactory.getPieChartView(this,    buildCategoryDataset("Project budget", list), renderer);      
柱狀圖      
// 描繪器設定
 public XYMultipleSeriesRenderer getBarRenderer(ArrayList<Information> informations) {}      
private void setChartSettings(XYMultipleSeriesRenderer renderer,ArrayList<Information> informations) {}      
// 資料設定
 private XYMultipleSeriesDataset getBarDataset( ArrayList<Information> informations) {}      
View view = ChartFactory.getBarChartView(this, getBarDataset(list),getBarRenderer(list),       
Type.STACKED); // Type.STACKED      
部落格位址 http://www.cnblogs.com/zhangchaot/p/5892638.html      
http://www.cnblogs.com/huangjialin/p/5613435.html
參考部落格位址:  
           
畫圖achartengine
基于Android便攜式健康監測系統——Android系統開發設計
http://wenku.baidu.com/link?url=mWNBycGTS_sI-c75usVzzQO2ld9Vph4Sz3cGCgd4O-ba78TE-iJLMoQilwha7aoqeq8S-DVBQ5dB_ZkpVwl-0hI7akGNWpzZ_gp6GkhPdqC


Android利用Achartengine實作實時曲線圖
http://blog.csdn.net/lamelias/article/details/41894433
           
http://www.jizhuomi.com/android/environment/130.html
           
http://mobile.51cto.com/design-447554.htm
           
http://blog.csdn.net/eastmoon502136/article/details/51049111
           
http://www.cnblogs.com/tijing/archive/2012/09/13/2682854.html
           
http://blog.csdn.net/best2012power/article/details/49950195(安卓動态曲線的繪制)
           
http://www.java123.net/1001350.html
           
好了,今天就整理到這裡,趕腳就是把自己查閱的資料按照自己的邏輯理順了一下,方面下次快速查找。2016.12.19
           
補充:
           
(1)使用這個jar包畫出來折線圖,背景的四周卻總是黑黑的。


後來在用到這個屬性時:
[java] view plain copy print?
mRenderer.setMargins(new int[]{20,30,50,20});   //設定邊距,  
        //分别為:1.距離頂端标題的距離、2.距離螢幕左邊的距離、 3.X坐标标題與點圖例的距離、 4.距離螢幕右邊的距離  


才意識到,這四周可能是Margin,然後找方法,果然有個
[java] view plain copy print?
mRenderer.setMarginsColor(0xffffff);
           
(2)如何設定背景色:
Java代碼  
renderer.setApplyBackgroundColor(true);//是否可以自定義背景色  
        renderer.setBackgroundColor(Color.BLACK); //chart内部的背景色  
        renderer.setMarginsColor(Color.BLACK);//chart邊緣部分的背景色