天天看點

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

前言:

在看本篇的時候,請确認已經看過了 <a target="_blank" href="http://youxilua.blog.51cto.com/3357586/772616">某android平闆項目開發筆記----aChartEngine圖表顯示(1)</a> 不然,有些地方這裡就不再說明…

關于XYMutilpleSeriesDataset 一些注意的地方

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

<a target="_blank" href="http://blog.51cto.com/attachment/201202/191711863.png"></a>

 圖中,我們可以看出,XYMutilpleSeriesDataset 隻能添加XYSeries,對于,線性圖而言,我們需要明确輸入x,y值,這樣問題不是很大,但是,對于條形圖,餅圖,對于x軸的屬性就有點多餘了,對于非線性圖而言,我們需要的資料僅僅隻需要一個值,對于這種情況,我們就需要使用一個新的對象,CategorySeries ,因為,我們繪制的是二維坐标圖,所有我們在添加到XYMutilpleSeriesDataset 時需要把CategorySeries 對象轉換為二維坐标,

View or Intent?

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

優點

缺點

Intent方式顯示圖表

簡單友善,對于單單顯示圖表而言是個不錯的選擇

無法進行自定義操作

自定義View方式顯示圖表

可以在一個螢幕顯示多個圖表,可以自定義顯示位置

需要進行一定的配置

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

public class BarExActivity extends Activity {       @Override    protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         // 1, 構造顯示用渲染圖         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();         // 2,進行顯示         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();         // 2.1, 建立柱狀圖資料         Random r = new Random();         for (int i = 0; i &lt; 2; i++) {             // 注意,這裡與昨天的XYSeries 有一點不同!!這裡使用CategroySeries             CategorySeries series = new CategorySeries("test" + (i + 1));             // 填充資料             for (int k = 0; k &lt; 10; k++) {                 // 直接填入需要顯示的資料,即:Y軸的值                 series.add(Math.abs(20 + r.nextInt() % 100));             }             // 這裡要進行轉換             dataset.addSeries(series.toXYSeries());         }         // 3, 對點的繪制進行設定         XYSeriesRenderer xyRenderer = new XYSeriesRenderer();         // 3.1設定顔色         xyRenderer.setColor(Color.BLUE);           // 3.2設定點的樣式         // xyRenderer.setPointStyle(PointStyle.SQUARE);         // 3.3, 将要繪制的點添加到坐标繪制中         renderer.addSeriesRenderer(xyRenderer);         // 3.4,重複 3.1~3.3的步驟繪制第二組系列點         xyRenderer = new XYSeriesRenderer();         xyRenderer.setColor(Color.RED);         // xyRenderer.setPointStyle(PointStyle.CIRCLE);         renderer.addSeriesRenderer(xyRenderer);         // 注意這裡x,y min 不要相同         // 這裡用一種内置的設定x,y範圍的方法         //順序是:minX, maxX, minY, maxY         double[] range = { 0, 10, 1, 200 };         renderer.setRange(range);         // 等價于:         // -------------------         // renderer.setXAxisMin(0);         // renderer.setXAxisMax(10);         // renderer.setYAxisMin(1);         // renderer.setYAxisMax(200);         // -------------------                     // 設定合适的刻度,在軸上顯示的數量是 MAX / labels         renderer.setXLabels(10);         renderer.setYLabels(10);           // 設定x,y軸顯示的排列,預設是 Align.CENTER         renderer.setXLabelsAlign(Align.CENTER);         renderer.setYLabelsAlign(Align.RIGHT);           // 設定坐标軸,軸的顔色         renderer.setAxesColor(Color.RED);         // 顯示網格         renderer.setShowGrid(true);         // 設定x,y軸上的刻度的顔色         renderer.setLabelsColor(Color.BLACK);           // 設定頁邊空白的顔色         renderer.setMarginsColor(Color.CYAN);         // 設定是否顯示,坐标軸的軸,預設為 true         renderer.setShowAxes(true);           // 設定條形圖之間的距離         renderer.setBarSpacing(0.1);         int length = renderer.getSeriesRendererCount();           for (int i = 0; i &lt; length; i++) {             SimpleSeriesRenderer ssr = renderer.getSeriesRendererAt(i);             // 不知道作者的居中是怎麼計算的,預設是Align.CENTER,但是對于兩個以上的條形顯示             // 就畫在了最右邊             ssr.setChartValuesTextAlign(Align.RIGHT);             ssr.setChartValuesTextSize(12);             ssr.setDisplayChartValues(true);         }         // Intent intent = new LinChart().execute(this);         // Intent intent = ChartFactory         // .getBarChartIntent(this, dataset, renderer, Type.DEFAULT);         // startActivity(intent);           LinearLayout barchart = (LinearLayout) findViewById(R.id.barchart);         GraphicalView mChartView = ChartFactory.getBarChartView(this, dataset,                 renderer, Type.DEFAULT);           barchart.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,                 LayoutParams.FILL_PARENT));           // 這裡我偷偷的封裝了一個 折線圖的顯示,用作練習吧!把上一章的例子改為用 view //      LinChart lineChart = new LinChart(); //      LinearLayout linechart = (LinearLayout) findViewById(R.id.linechart); //      GraphicalView lineView = lineChart.chartView(this); //      linechart.addView(lineView, new LayoutParams(LayoutParams.FILL_PARENT, //              LayoutParams.FILL_PARENT));     } } 

 我們還需要在布局檔案裡面添加:

&lt;LinearLayout android:id="@+id/barchart" android:orientation="horizontal"        android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" /&gt;  

顯示效果:

<a target="_blank" href="http://blog.51cto.com/attachment/201202/192340357.png"></a>

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

<a target="_blank" href="http://blog.51cto.com/attachment/201202/192423855.png"></a>

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

本文轉自 liam2199 部落格,原文連結:  http://blog.51cto.com/youxilua/772614 如需轉載請自行聯系原作者