某android平板項目開發筆記----aChartEngine圖表顯示(2)

前言:

在看本篇的時候,請確認已經看過了

某android平板項目開發筆記----aChartEngine圖表顯示(1)

不然,有些地方這裏就不再說明…

關於XYMutilpleSeriesDataset 一些注意的地方

  我們可以使用的所有Series對象關係如下圖

某android平板項目開發筆記----aChartEngine圖表顯示(2)

從圖中,我們可以看出,XYMutilpleSeriesDataset 只能添加XYSeries,對於,線性圖而言,我們需要明確輸入x,y值,這樣問題不是很大,但是,對於條形圖,餅圖,對於x軸的屬性就有點多餘了,對於非線性圖而言,我們需要的數據僅僅只需要一個值,對於這種情況,我們就需要使用一個新的對象,CategorySeries ,因爲,我們繪製的是二維座標圖,所有我們在添加到XYMutilpleSeriesDataset 時需要把CategorySeries 對象轉換爲二維座標,

View or Intent?

在昨天的例子中,我直接構造了一個可以用於直接顯示的Intent,這樣做雖然,方便,但是,可編輯的地方就不多,例如,我需要在一個屏幕上顯示多個圖表那就無能爲力了.對於這種情況,我們需要構造一個View,方法也很簡單,這裏先對比一下,兩種情況的使用範圍

  優點 缺點

Intent方式顯示圖表

簡單方便,對於單單顯示圖表而言是個不錯的選擇 無法進行自定義操作

自定義View方式顯示圖表

可以在一個屏幕顯示多個圖表,可以自定義顯示位置 需要進行一定的配置

 

說了這麼多來一個例子吧:請認真看註釋!!!

001 public class BarExActivity extends Activity {
002   
003     @Override
004     protected void onCreate(Bundle savedInstanceState) {
005         // TODO Auto-generated method stub
006         super.onCreate(savedInstanceState);
007         setContentView(R.layout.main);
008         // 1, 構造顯示用渲染圖
009         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
010         // 2,進行顯示
011         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
012         // 2.1, 創建柱狀圖數據
013         Random r = new Random();
014         for (int i = 0; i < 2; i++) {
015             // 注意,這裏與昨天的XYSeries 有一點不同!!這裏使用CategroySeries
016             CategorySeries series = new CategorySeries("test" + (i + 1));
017             // 填充數據
018             for (int k = 0; k < 10; k++) {
019                 // 直接填入需要顯示的數據,即:Y軸的值
020                 series.add(Math.abs(20 + r.nextInt() % 100));
021             }
022             // 這裏要進行轉換
023             dataset.addSeries(series.toXYSeries());
024         }
025         // 3, 對點的繪製進行設置
026         XYSeriesRenderer xyRenderer = new XYSeriesRenderer();
027         // 3.1設置顏色
028         xyRenderer.setColor(Color.BLUE);
029   
030         // 3.2設置點的樣式
031         // xyRenderer.setPointStyle(PointStyle.SQUARE);
032         // 3.3, 將要繪製的點添加到座標繪製中
033         renderer.addSeriesRenderer(xyRenderer);
034         // 3.4,重複 3.1~3.3的步驟繪製第二組系列點
035         xyRenderer = new XYSeriesRenderer();
036         xyRenderer.setColor(Color.RED);
037         // xyRenderer.setPointStyle(PointStyle.CIRCLE);
038         renderer.addSeriesRenderer(xyRenderer);
039         // 注意這裏x,y min 不要相同
040         // 這裏用一種內置的設置x,y範圍的方法
041         //順序是:minX, maxX, minY, maxY
042         double[] range = { 0, 10, 1, 200 };
043         renderer.setRange(range);
044         // 等價於:
045         // -------------------
046         // renderer.setXAxisMin(0);
047         // renderer.setXAxisMax(10);
048         // renderer.setYAxisMin(1);
049         // renderer.setYAxisMax(200);
050         // -------------------
051           
052   
053         // 設置合適的刻度,在軸上顯示的數量是 MAX / labels
054         renderer.setXLabels(10);
055         renderer.setYLabels(10);
056   
057         // 設置x,y軸顯示的排列,默認是 Align.CENTER
058         renderer.setXLabelsAlign(Align.CENTER);
059         renderer.setYLabelsAlign(Align.RIGHT);
060   
061         // 設置座標軸,軸的顏色
062         renderer.setAxesColor(Color.RED);
063         // 顯示網格
064         renderer.setShowGrid(true);
065         // 設置x,y軸上的刻度的顏色
066         renderer.setLabelsColor(Color.BLACK);
067   
068         // 設置頁邊空白的顏色
069         renderer.setMarginsColor(Color.CYAN);
070         // 設置是否顯示,座標軸的軸,默認爲 true
071         renderer.setShowAxes(true);
072   
073         // 設置條形圖之間的距離
074         renderer.setBarSpacing(0.1);
075         int length = renderer.getSeriesRendererCount();
076   
077         for (int i = 0; i < length; i++) {
078             SimpleSeriesRenderer ssr = renderer.getSeriesRendererAt(i);
079             // 不知道作者的居中是怎麼計算的,默認是Align.CENTER,但是對於兩個以上的條形顯示
080             // 就畫在了最右邊
081             ssr.setChartValuesTextAlign(Align.RIGHT);
082             ssr.setChartValuesTextSize(12);
083             ssr.setDisplayChartValues(true);
084         }
085         // Intent intent = new LinChart().execute(this);
086         // Intent intent = ChartFactory
087         // .getBarChartIntent(this, dataset, renderer, Type.DEFAULT);
088         // startActivity(intent);
089   
090         LinearLayout barchart = (LinearLayout) findViewById(R.id.barchart);
091         GraphicalView mChartView = ChartFactory.getBarChartView(this, dataset,
092                 renderer, Type.DEFAULT);
093   
094         barchart.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
095                 LayoutParams.FILL_PARENT));
096   
097         // 這裏我偷偷的封裝了一個 折線圖的顯示,用作練習吧!把上一章的例子改爲用 view
098 //      LinChart lineChart = new LinChart();
099 //      LinearLayout linechart = (LinearLayout) findViewById(R.id.linechart);
100 //      GraphicalView lineView = lineChart.chartView(this);
101 //      linechart.addView(lineView, new LayoutParams(LayoutParams.FILL_PARENT,
102 //              LayoutParams.FILL_PARENT));
103     }
104 }

 

我們還需要在佈局文件裏面添加:

 

1 <LinearLayout android:id="@+id/barchart" android:orientation="horizontal"
2         android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" />
3     

顯示效果:

某android平板項目開發筆記----aChartEngine圖表顯示(2)

把昨天的例子也添加進來,顯示效果:

某android平板項目開發筆記----aChartEngine圖表顯示(2)

今天就這麼多吧,接下來的日子,我需要設計數據庫,這個aChartEngine 就暫且告一段落了吧…

轉自: http://www.cnblogs.com/youxilua/archive/2012/01/18/2325132.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章