使用achartengine開發曲線圖相關的Android應用程序

應用程序的開發過程中,經常會遇到和曲線圖打交道的情況,相比自己寫代碼繪製,無疑的,使用一些美觀高效的開源庫是一個更好的選擇。目前開源的曲線圖繪製工作有很多,本文以achartengine爲例,介紹在Android系統下開發曲線圖相關程序的有關方法。

AChartEngine是專爲Android系統設計的圖形庫,可以用於繪製多種圖表,具體列表如下,且每張圖上都支持多條曲線:

line chart ; area chart ; scatter chart ; time chart ; bar chart ;

pie chart ; bubble chart ; doughnut chart ; range (high-low) bar chart ;

下面主要介紹畫line chart的方法:

幾個主要的類:

XYMultipleSeriesRenderer renderer; //曲線圖的格式,包括顏色,值的範圍,點和線的形狀等等 
XYMultipleSeriesDataset dataset; //保存點集數據 ,包括每條曲線的X,Y座標

對圖表而言幾個重要的變量:

String[] titles; //每條曲線的名稱 
List<double []> x; //點集的x座標 
List<double []> y; //點集的y座標 
int[] colors; //每條曲線的顏色 
PointStyle[] styles; //每條曲線點的形狀

XYMultipleSeriesRenderer中的一些重要的方法,由名稱可以看出具體功能:

public void addSeriesRenderer(SimpleSeriesRenderer renderer) 
public void removeSeriesRenderer(SimpleSeriesRenderer renderer) 
public SimpleSeriesRenderer getSeriesRendererAt(int index)

public void setBackgroundColor(int color) 
public void setAxesColor(int color) 
public void setLabelsColor(int color) 
public void setShowAxes(boolean showAxes)

public void setChartTitle(String title) 
public void setChartTitleTextSize(float textSize) 
public void setXTitle(String title) 
public void setAxisTitleTextSize(float textSize) 
public void setXAxisMin(double min) 
public void setXAxisMax(double max) 
public void setYTitle(String title) 
public void setYAxisMin(double min) 
public void setYAxisMax(double max)


XYMultipleSeriesDataset中的一些重要方法,由名稱可看出具體功能:

public void addSeries(XYSeries series) 
public void removeSeries(int index) 
public void removeSeries(XYSeries series) 

AChartEngine的事例代碼中提供了一些管理XYMultipleSeriesDataset和XYMultipleSeriesRenderer的方式,通過buildRenderer,setChartSettings,buildDataset來實現,減少了分條目設置屬性的麻煩,具體見代碼中的函數。

下文代碼在一張圖中繪製了兩條曲線,並在主窗體中顯示出來:

package net.ispiders;

import java.util.ArrayList; 
import java.util.List;

import org.achartengine.ChartFactory; 
import org.achartengine.chart.PointStyle; 
import org.achartengine.model.XYMultipleSeriesDataset; 
import org.achartengine.model.XYSeries; 
import org.achartengine.renderer.XYMultipleSeriesRenderer; 
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.View;

public class chartDemo extends Activity { 
     
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);

        String[] titles = new String[] { "First", "Second"};

        List x = new ArrayList(); 
        List y = new ArrayList();

        x.add(new double[] { 1, 3, 5, 7, 9, 11} ); 
        x.add(new double[] { 0, 2, 4, 6, 8, 10} );

        y.add(new double[] { 3, 14, 5, 30, 20, 25}); 
        y.add(new double[] { 18, 9, 21, 15, 10, 6});

        XYMultipleSeriesDataset dataset = buildDataset(titles, x, y);

        int[] colors = new int[] { Color.BLUE, Color.GREEN}; 
        PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND}; 
        XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles, true);

        setChartSettings(renderer, "Line Chart Demo", "X", "Y", -1, 12, 0, 35 , Color.WHITE, Color.WHITE);

        View chart = ChartFactory.getLineChartView(this, dataset, renderer);

        setContentView(chart); 
    }

    protected XYMultipleSeriesDataset buildDataset(String[] titles, 
                                                   List xValues, 
                                                   List yValues) 
    { 
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

        int length = titles.length;                  //有幾條線 
         for (int i = 0; i < length; i++) 
        { 
            XYSeries series = new XYSeries(titles[i]);    //根據每條線的名稱創建 
              double[] xV = xValues.get(i);                 //獲取第i條線的數據 
              double[] yV = yValues.get(i); 
            int seriesLength = xV.length;               

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章