從事Android不久,被圖表搞暈了,一看見achartengine就暈菜了,今天終於到了一個簡單的achartengine繪製折線圖講解,好待我這水平能看懂,分享一下。轉載地址是http://www.open-open.com/lib/view/open1396359314653.html,感謝大神。
achartengine地址:https://code.google.com/p/achartengine/e.google.com/achartengine
數據模型:
XYSeries: 最常用的數據結構,主要包括一系列的double型(x,y)點對及一個名稱(title)。
XYValueSeries:包括一系列的(x,y,value)點對及一個名稱(title)。
XYMultipleSeriesDataset:包含一系列XYSeries,是最終的數據結構
TimeSeries:與XYSeries類似,x變爲Date型,可以轉化爲XYSeries。
CategorySeries:與XYSeries類似,x變爲string型,可以轉化爲XYSeries。
MultipleCategorySeries:一系列CategorySeries。
不同的數據模型用於不同的圖表顯示。XYSeries可以用於折線圖、直方圖。CategorySeries可以用於圓餅圖。每種數據模型都提供了豐富的操作接口,用於插入刪除數據等多種操作。我們可以根據需要將數據存爲合適的數據模型。
繪製器聲明瞭繪製圖表的類型。主要包括以下幾種。
SimpleSeriesRenderer、 XYSeriesRenderer用於設置每張圖中每一個序列的繪製方法。而DefaultRenderer和 XYMultipleSeriesRenderer用於設置整張圖的繪製格式。它們之間的關係類似於XYSeries 與XYMultipleSeriesDataset之間的關係。
要 畫一張圖,我們需要設置好需要繪製的數據及繪製的方法。確定好data model及renderer後,再調用合適的繪製方法繪製圖形。庫提供了兩種繪製圖形的方法,一種是get***Intent( )(如getLineChartIntent())直接新建一個Activity全屏顯示生成的圖表,另一種是get***View( )(如getLineChartView())生成一個View,用戶可以自行設置它的顯示。
主要通過設置幾個對象
1、XYSeries對象:用於存儲一條線的數據信息;
2、XYMultipleSeriesDataset對象:即數據集,可添加多個XYSeries對象,因爲一個折線圖中可能有多條線。
3、XYSeriesRenderer對象:主要是用來設置一條線條的風格,顏色啊,粗細之類的。
4、XYMultipleSeriesRenderer對象:主要用來定義一個圖的整體風格,設置xTitle,yTitle,chartName等等整體性的風格,
可添加多個XYSeriesRenderer對象,因爲一個圖中可以有多條折線。
設置完那些對象之後,可通過 org.achartengine.ChartFactory調用數據集XYMultipleSeriesDataset對象
與XYMultipleSeriesRenderer對象來畫圖並將圖加載到GraphicalView中,
ChartFactory有多種api,通過這些api調用來決定是畫折線圖還是柱狀圖。
繪製的基礎
從圖中,我們可以看出,繪製一個圖表我們其實,我們只需要理解三個概念
1,ChartFactory ,傳入XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset,然後,我們只需用 getXXXChartIntent(Context context,XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset,)方法就可以進行圖表的顯示
2,XYMutilpleSeriesRenderer 用於進行繪製的設置,添加的XYSeriesRender對象,用於定義繪製的點集合設置,注意數量要和XYMutilpleSeriesDataset,添加的XYseries一致!!!
3,XYMutilpleSeriesDataset 用於數據的存放,添加的XYseries對象,用於提供繪製的點集合的數據
以下爲一個小例子:
public class ShowExamActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// 1, 構造顯示用渲染圖
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
// 2,進行顯示
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// 2.1, 構建數據
Random r = new Random();
for (int i = 0; i < 2; i++) {
XYSeries series = new XYSeries("test" + (i + 1));
// 填充數據
for (int k = 0; k < 10; k++) {
// 填x,y值
series.add(k, 20 + r.nextInt() % 100);
}
// 需要繪製的點放進dataset中
dataset.addSeries(series);
}
// 3, 對點的繪製進行設置
XYSeriesRenderer xyRenderer = new XYSeriesRenderer();
// 3.1設置顏色
xyRenderer.setColor(Color.BLUE);
// 3.2設置點的樣式
xyRenderer.setPointStyle(PointStyle.SQUARE);
// 3.3, 將要繪製的點添加到座標繪製中
renderer.addSeriesRenderer(xyRenderer);
// 3.4,重複 1~3的步驟繪製第二個系列點
xyRenderer = new XYSeriesRenderer();
xyRenderer.setColor(Color.RED);
xyRenderer.setPointStyle(PointStyle.CIRCLE);
renderer.addSeriesRenderer(xyRenderer);
// Intent intent = new LinChart().execute(this);
Intent intent = ChartFactory
.getLineChartIntent(this, dataset, renderer);
startActivity(intent);
}
}
這裏有一點要注意,我們是用內置的activity進行我們的圖表的顯示:所以,我們要在AndroiManifest裏面添加一句
<activity android:name="org.achartengine.GraphicalActivity" />
效果: