Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
生活随笔
收集整理的這篇文章主要介紹了
Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.簡(jiǎn)介
AChartEngine(簡(jiǎn)稱ACE)是Google的一個(gè)開(kāi)源圖表庫(kù)(for Android)。它功能強(qiáng)大,支持散點(diǎn)圖、折線 。關(guān)于里面類(lèi)的具體使用,請(qǐng)下載響應(yīng)的文檔說(shuō)明(主頁(yè)上有)。
2.開(kāi)發(fā)步驟
1)在工程中新建一個(gè)文件夾比如lib,用于存放ACE Libraries,把a(bǔ)chartegine-0.5.0.jar包復(fù)制到lib里面。然后把這個(gè)jar的路徑添加到項(xiàng)目的Build Path中。 2)修改AndroidManifest.xml 主要是加入一個(gè)<activity>: < activity android:name = "org.achartengine.GraphicalActivity" /> 3)繪制柱狀圖 public class main extends ListActivity { ? private static final int SERIES_NR = 2; ? /** Called when the activity is first created. */ ? private ArrayList<Map<String,String>> maps = new ArrayList<Map<String,String>>(); ? @Override ? public void onCreate(Bundle savedInstanceState) { ? super .onCreate(savedInstanceState); ? // ? ? ? ?setContentView(R.layout.main); ? // 加入 ListItem “ 調(diào)度查詢 ” ? HashMap<String,String> map= new HashMap<String,String>(); ? map.put( "name" , " 柱狀圖 " ); ? map.put( "desc" , " 顯示柱狀圖 " ); ? maps .add(map); ? // 構(gòu)建 listView 的適配器 ? SimpleAdapter adapter= new SimpleAdapter( this , maps , ? android.R.layout. simple_list_item_2 , // SDK 庫(kù)中提供的一個(gè)包含兩個(gè) TextView 的 layout ? new String[]{ "name" , "desc" }, // maps 中的兩個(gè) key ? new int []{android.R.id. text1 ,android.R.id. text2 } // 兩個(gè) TextView 的 id ? ? ? ? ); ? this .setListAdapter(adapter); ? } ? // ListItem 監(jiān)聽(tīng)器方法 ? protected void onListItemClick(ListView l, View v, int position, long id) { ? super .onListItemClick(l, v, position, id); ? XYMultipleSeriesRenderer renderer = getBarDemoRenderer(); ? Intent intent = ChartFactory.getBarChartIntent ( this , getBarDemoDataset(), renderer, Type. DEFAULT ); ? startActivity(intent); ? } ? private XYMultipleSeriesDataset getBarDemoDataset() { ? XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); ? final int nr = 10; ? Random r = new Random(); ? for ( int i = 0; i < SERIES_NR ; i++) { ? CategorySeries series = new CategorySeries( "Demo series " + (i + 1)); ? for ( int k = 0; k < nr; k++) { ? series.add(100 + r.nextInt() % 100); ? } ? dataset.addSeries(series.toXYSeries()); ? } ? return dataset; ? } ? public XYMultipleSeriesRenderer getBarDemoRenderer() { ? XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); ? SimpleSeriesRenderer r = new SimpleSeriesRenderer(); ? r.setColor(Color. BLUE ); ? renderer.addSeriesRenderer(r); ? r = new SimpleSeriesRenderer(); ? r.setColor(Color. GREEN ); ? renderer.addSeriesRenderer(r); ? setChartSettings(renderer); ? return renderer; ? } ? private void setChartSettings(XYMultipleSeriesRenderer renderer) { ? renderer.setChartTitle( "Chart demo" ); ? renderer.setXTitle( "x values" ); ? renderer.setYTitle( "y values" ); ? renderer.setXAxisMin(0.5); ? renderer.setXAxisMax(10.5); ? renderer.setYAxisMin(0); ? renderer.setYAxisMax(210); ? } ? } ? 代碼解析:在 onListItemClick 方法中,當(dāng)用戶點(diǎn)擊了“顯示圖表”之后,構(gòu)造一個(gè)intent對(duì)象,然后用startActivity發(fā)送消息到前面AndroidManifest.xml申明的那個(gè)activity( 即 GraphicalActivity )。于是圖表就顯示出來(lái)了。關(guān)鍵是intent的構(gòu)造方法 ChartFactory.getBarChartIntent。 ChartFactory提供了許多有用的工廠方法,如果你需要生成一個(gè)折線圖,可以用它的 getLineChartIntent 方法。 getBarChartIntent 方法有點(diǎn)復(fù)雜,需要我們準(zhǔn)備很多參數(shù)傳入。其中一個(gè)是 XYMultipleSeriesDataset 類(lèi)型的對(duì)象,用于提供圖表需要表示的數(shù)據(jù)集,這里我們用 ? getBarDemoDataset 來(lái)得到它。另外一個(gè)是 XYMultipleSeriesRenderer 類(lèi)型的對(duì)象,用于提供圖表展現(xiàn)時(shí)的一些樣式,這里我們用 getBarDemoRenderer 方法來(lái)得到它。 getLineChartIntent 方法很無(wú)聊,使用了一些隨機(jī)數(shù)來(lái)作為圖表數(shù)據(jù)。注意柱狀圖是支持多系列的,這里生成了兩個(gè)系列的數(shù)據(jù)。 getBarDemoRenderer 方法構(gòu)建了一個(gè) XYMultipleSeriesRenderer 用來(lái)設(shè)置2個(gè)系列各自的顏色,然后調(diào)用 setChartSettings 方法設(shè)置了下坐標(biāo)軸樣式。 4)繪制曲線 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]); ? ?//根據(jù)每條線的名稱創(chuàng)建 ?? double[] xV = xValues.get(i); ? ? ? ? ? ? ? ? //獲取第i條線的數(shù)據(jù) ?? double[] yV = yValues.get(i); ?? int seriesLength = xV.length; ? ? ? ? ? ? ? ? //有幾個(gè)點(diǎn) ? for (int k = 0; k < seriesLength; k++) ? ? ? ?//每條線里有幾個(gè)點(diǎn) ?? { ?? series.add(xV[k], yV[k]); ?? } ? dataset.addSeries(series); ?? } ? return dataset; ?? } ? protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles, boolean fill) ?? { ?? XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); ?? int length = colors.length; ?? for (int i = 0; i < length; i++) ?? { ?? XYSeriesRenderer r = new XYSeriesRenderer(); ?? r.setColor(colors[i]); ?? r.setPointStyle(styles[i]); ?? r.setFillPoints(fill); ?? renderer.addSeriesRenderer(r); ?? } ?? return renderer; ?? } ? protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, ?? String xTitle,String yTitle, double xMin, ?? double xMax, double yMin, double yMax, ?? int axesColor,int labelsColor) ?? { ?? renderer.setChartTitle(title); ?? renderer.setXTitle(xTitle); ?? renderer.setYTitle(yTitle); ?? renderer.setXAxisMin(xMin); ?? renderer.setXAxisMax(xMax); ?? renderer.setYAxisMin(yMin); ?? renderer.setYAxisMax(yMax); ?? renderer.setAxesColor(axesColor); ?? renderer.setLabelsColor(labelsColor); ?? } ?? }
2.開(kāi)發(fā)步驟
1)在工程中新建一個(gè)文件夾比如lib,用于存放ACE Libraries,把a(bǔ)chartegine-0.5.0.jar包復(fù)制到lib里面。然后把這個(gè)jar的路徑添加到項(xiàng)目的Build Path中。 2)修改AndroidManifest.xml 主要是加入一個(gè)<activity>: < activity android:name = "org.achartengine.GraphicalActivity" /> 3)繪制柱狀圖 public class main extends ListActivity { ? private static final int SERIES_NR = 2; ? /** Called when the activity is first created. */ ? private ArrayList<Map<String,String>> maps = new ArrayList<Map<String,String>>(); ? @Override ? public void onCreate(Bundle savedInstanceState) { ? super .onCreate(savedInstanceState); ? // ? ? ? ?setContentView(R.layout.main); ? // 加入 ListItem “ 調(diào)度查詢 ” ? HashMap<String,String> map= new HashMap<String,String>(); ? map.put( "name" , " 柱狀圖 " ); ? map.put( "desc" , " 顯示柱狀圖 " ); ? maps .add(map); ? // 構(gòu)建 listView 的適配器 ? SimpleAdapter adapter= new SimpleAdapter( this , maps , ? android.R.layout. simple_list_item_2 , // SDK 庫(kù)中提供的一個(gè)包含兩個(gè) TextView 的 layout ? new String[]{ "name" , "desc" }, // maps 中的兩個(gè) key ? new int []{android.R.id. text1 ,android.R.id. text2 } // 兩個(gè) TextView 的 id ? ? ? ? ); ? this .setListAdapter(adapter); ? } ? // ListItem 監(jiān)聽(tīng)器方法 ? protected void onListItemClick(ListView l, View v, int position, long id) { ? super .onListItemClick(l, v, position, id); ? XYMultipleSeriesRenderer renderer = getBarDemoRenderer(); ? Intent intent = ChartFactory.getBarChartIntent ( this , getBarDemoDataset(), renderer, Type. DEFAULT ); ? startActivity(intent); ? } ? private XYMultipleSeriesDataset getBarDemoDataset() { ? XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); ? final int nr = 10; ? Random r = new Random(); ? for ( int i = 0; i < SERIES_NR ; i++) { ? CategorySeries series = new CategorySeries( "Demo series " + (i + 1)); ? for ( int k = 0; k < nr; k++) { ? series.add(100 + r.nextInt() % 100); ? } ? dataset.addSeries(series.toXYSeries()); ? } ? return dataset; ? } ? public XYMultipleSeriesRenderer getBarDemoRenderer() { ? XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); ? SimpleSeriesRenderer r = new SimpleSeriesRenderer(); ? r.setColor(Color. BLUE ); ? renderer.addSeriesRenderer(r); ? r = new SimpleSeriesRenderer(); ? r.setColor(Color. GREEN ); ? renderer.addSeriesRenderer(r); ? setChartSettings(renderer); ? return renderer; ? } ? private void setChartSettings(XYMultipleSeriesRenderer renderer) { ? renderer.setChartTitle( "Chart demo" ); ? renderer.setXTitle( "x values" ); ? renderer.setYTitle( "y values" ); ? renderer.setXAxisMin(0.5); ? renderer.setXAxisMax(10.5); ? renderer.setYAxisMin(0); ? renderer.setYAxisMax(210); ? } ? } ? 代碼解析:在 onListItemClick 方法中,當(dāng)用戶點(diǎn)擊了“顯示圖表”之后,構(gòu)造一個(gè)intent對(duì)象,然后用startActivity發(fā)送消息到前面AndroidManifest.xml申明的那個(gè)activity( 即 GraphicalActivity )。于是圖表就顯示出來(lái)了。關(guān)鍵是intent的構(gòu)造方法 ChartFactory.getBarChartIntent。 ChartFactory提供了許多有用的工廠方法,如果你需要生成一個(gè)折線圖,可以用它的 getLineChartIntent 方法。 getBarChartIntent 方法有點(diǎn)復(fù)雜,需要我們準(zhǔn)備很多參數(shù)傳入。其中一個(gè)是 XYMultipleSeriesDataset 類(lèi)型的對(duì)象,用于提供圖表需要表示的數(shù)據(jù)集,這里我們用 ? getBarDemoDataset 來(lái)得到它。另外一個(gè)是 XYMultipleSeriesRenderer 類(lèi)型的對(duì)象,用于提供圖表展現(xiàn)時(shí)的一些樣式,這里我們用 getBarDemoRenderer 方法來(lái)得到它。 getLineChartIntent 方法很無(wú)聊,使用了一些隨機(jī)數(shù)來(lái)作為圖表數(shù)據(jù)。注意柱狀圖是支持多系列的,這里生成了兩個(gè)系列的數(shù)據(jù)。 getBarDemoRenderer 方法構(gòu)建了一個(gè) XYMultipleSeriesRenderer 用來(lái)設(shè)置2個(gè)系列各自的顏色,然后調(diào)用 setChartSettings 方法設(shè)置了下坐標(biāo)軸樣式。 4)繪制曲線 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]); ? ?//根據(jù)每條線的名稱創(chuàng)建 ?? double[] xV = xValues.get(i); ? ? ? ? ? ? ? ? //獲取第i條線的數(shù)據(jù) ?? double[] yV = yValues.get(i); ?? int seriesLength = xV.length; ? ? ? ? ? ? ? ? //有幾個(gè)點(diǎn) ? for (int k = 0; k < seriesLength; k++) ? ? ? ?//每條線里有幾個(gè)點(diǎn) ?? { ?? series.add(xV[k], yV[k]); ?? } ? dataset.addSeries(series); ?? } ? return dataset; ?? } ? protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles, boolean fill) ?? { ?? XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); ?? int length = colors.length; ?? for (int i = 0; i < length; i++) ?? { ?? XYSeriesRenderer r = new XYSeriesRenderer(); ?? r.setColor(colors[i]); ?? r.setPointStyle(styles[i]); ?? r.setFillPoints(fill); ?? renderer.addSeriesRenderer(r); ?? } ?? return renderer; ?? } ? protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, ?? String xTitle,String yTitle, double xMin, ?? double xMax, double yMin, double yMax, ?? int axesColor,int labelsColor) ?? { ?? renderer.setChartTitle(title); ?? renderer.setXTitle(xTitle); ?? renderer.setYTitle(yTitle); ?? renderer.setXAxisMin(xMin); ?? renderer.setXAxisMax(xMax); ?? renderer.setYAxisMin(yMin); ?? renderer.setYAxisMax(yMax); ?? renderer.setAxesColor(axesColor); ?? renderer.setLabelsColor(labelsColor); ?? } ?? }
總結(jié)
以上是生活随笔為你收集整理的Android之使用AchartEngineActivity引擎绘制柱状图、曲线图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 炎黄信用卡金多少国家可以用
- 下一篇: 出去吃饭,商家不开票?这个举报方式,请收