转自http://blog.csdn.net/way_ping_li/article/details/8621927

1.简介

  AChartEngine(简称ACE)是Google的一个开源图表库(for Android)。它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表。该项目地址位于: http://code.google.com/p/achartengine/。关于里面类的具体使用,请下载响应的文档说明(主页上有)。

2.开发步骤

1)在工程中新建一个文件夹比如lib,用于存放ACE Libraries,把achartegine-0.5.0.jar包复制到lib里面。然后把这个jar的路径添加到项目的Build Path中。

2)修改AndroidManifest.xml

  主要是加入一个:

  < activity android:name = "org.achartengine.GraphicalActivity" />

3)绘制柱状图

[java]  view plain copy
  1. public class main extends ListActivity {  
  2.   private static final int SERIES_NR = 2;  
  3.     /** Called when the activity is first created. */  
  4.   private ArrayList> maps = new ArrayList>();  
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super .onCreate(savedInstanceState);  
  8. //        setContentView(R.layout.main);  
  9.         // 加入 ListItem “ 调度查询 ”  
  10.         HashMap map= new HashMap();  
  11.         map.put( "name" , " 柱状图 " );  
  12.         map.put( "desc" , " 显示柱状图 " );  
  13.         maps .add(map);  
  14.         // 构建 listView 的适配器  
  15.         SimpleAdapter adapter= new SimpleAdapter( this , maps ,  
  16.         android.R.layout. simple_list_item_2 , // SDK 库中提供的一个包含两个 TextView 的 layout  
  17.         new String[]{ "name" , "desc" }, // maps 中的两个 key  
  18.         new int []{android.R.id. text1 ,android.R.id. text2 } // 两个 TextView 的 id        
  19.         );  
  20.         this .setListAdapter(adapter);  
  21.          
  22.     }  
  23.     // ListItem 监听器方法  
  24.     protected void onListItemClick(ListView l, View v, int position, long id) {  
  25.         super .onListItemClick(l, v, position, id);  
  26.         XYMultipleSeriesRenderer renderer = getBarDemoRenderer();  
  27.         Intent intent = ChartFactory.getBarChartIntent ( this , getBarDemoDataset(), renderer, Type. DEFAULT );  
  28.         startActivity(intent);  
  29.     }  
  30.     private XYMultipleSeriesDataset getBarDemoDataset() {  
  31.         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
  32.         final int nr = 10;  
  33.         Random r = new Random();  
  34.         for ( int i = 0; i < SERIES_NR ; i++) {  
  35.           CategorySeries series = new CategorySeries( "Demo series " + (i + 1));  
  36.           for ( int k = 0; k < nr; k++) {  
  37.             series.add(100 + r.nextInt() % 100);  
  38.           }  
  39.           dataset.addSeries(series.toXYSeries());  
  40.         }  
  41.         return dataset;  
  42.       }  
  43.     public XYMultipleSeriesRenderer getBarDemoRenderer() {  
  44.         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();  
  45.         SimpleSeriesRenderer r = new SimpleSeriesRenderer();  
  46.         r.setColor(Color. BLUE );  
  47.         renderer.addSeriesRenderer(r);  
  48.         r = new SimpleSeriesRenderer();  
  49.         r.setColor(Color. GREEN );  
  50.         renderer.addSeriesRenderer(r);  
  51.         setChartSettings(renderer);  
  52.         return renderer;  
  53.       }  
  54.    
  55.        private void setChartSettings(XYMultipleSeriesRenderer renderer) {  
  56.         renderer.setChartTitle( "Chart demo" );  
  57.         renderer.setXTitle( "x values" );  
  58.         renderer.setYTitle( "y values" );  
  59.         renderer.setXAxisMin(0.5);  
  60.         renderer.setXAxisMax(10.5);  
  61.         renderer.setYAxisMin(0);  
  62.         renderer.setYAxisMax(210);  
  63.       }  
  64. }  


 

  代码解析:在 onListItemClick 方法中,当用户点击了“显示图表”之后,构造一个intent对象,然后用startActivity发送消息到前面AndroidManifest.xml申明的那个activity( 即 GraphicalActivity )。于是图表就显示出来了。关键是intent的构造方法 ChartFactory.getBarChartIntent。

  ChartFactory提供了许多有用的工厂方法,如果你需要生成一个折线图,可以用它的 getLineChartIntent 方法。

  getBarChartIntent 方法有点复杂,需要我们准备很多参数传入。其中一个是 XYMultipleSeriesDataset 类型的对象,用于提供图表需要表示的数据集,这里我们用     getBarDemoDataset 来得到它。另外一个是 XYMultipleSeriesRenderer 类型的对象,用于提供图表展现时的一些样式,这里我们用 getBarDemoRenderer 方法来得到它。

  getLineChartIntent 方法很无聊,使用了一些随机数来作为图表数据。注意柱状图是支持多系列的,这里生成了两个系列的数据。

  getBarDemoRenderer 方法构建了一个 XYMultipleSeriesRenderer 用来设置2个系列各自的颜色,然后调用 setChartSettings 方法设置了下坐标轴样式。

4)绘制曲线

[java]  view plain copy
  1. import java.util.ArrayList;   
  2. import java.util.List;  
  3.   
  4. import org.achartengine.ChartFactory;   
  5. import org.achartengine.chart.PointStyle;   
  6. import org.achartengine.model.XYMultipleSeriesDataset;   
  7. import org.achartengine.model.XYSeries;   
  8. import org.achartengine.renderer.XYMultipleSeriesRenderer;   
  9. import org.achartengine.renderer.XYSeriesRenderer;  
  10.   
  11. import android.app.Activity;   
  12. import android.graphics.Color;   
  13. import android.os.Bundle;   
  14. import android.view.View;  
  15.   
  16. public class chartDemo extends Activity {   
  17.        
  18.     @Override   
  19.     public void onCreate(Bundle savedInstanceState) {   
  20.         super.onCreate(savedInstanceState);  
  21.   
  22.         String[] titles = new String[] { "First""Second"};  
  23.   
  24.         List x = new ArrayList();   
  25.         List y = new ArrayList();  
  26.   
  27.         x.add(new double[] { 1357911} );   
  28.         x.add(new double[] { 0246810} );  
  29.   
  30.         y.add(new double[] { 3145302025});   
  31.         y.add(new double[] { 1892115106});  
  32.   
  33.         XYMultipleSeriesDataset dataset = buildDataset(titles, x, y);  
  34.   
  35.         int[] colors = new int[] { Color.BLUE, Color.GREEN};   
  36.         PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND};   
  37.         XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles, true);  
  38.   
  39.         setChartSettings(renderer, "Line Chart Demo""X""Y", -112035 , Color.WHITE, Color.WHITE);  
  40.   
  41.         View chart = ChartFactory.getLineChartView(this, dataset, renderer);  
  42.   
  43.         setContentView(chart);   
  44.     }  
  45.   
  46.     protected XYMultipleSeriesDataset buildDataset(String[] titles,   
  47.                                                    List xValues,   
  48.                                                    List yValues)   
  49.     {   
  50.         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
  51.   
  52.         int length = titles.length;                  //有几条线   
  53.          for (int i = 0; i < length; i++)   
  54.         {   
  55.             XYSeries series = new XYSeries(titles[i]);    //根据每条线的名称创建   
  56.               double[] xV = xValues.get(i);                 //获取第i条线的数据   
  57.               double[] yV = yValues.get(i);   
  58.             int seriesLength = xV.length;                 //有几个点  
  59.   
  60.               for (int k = 0; k < seriesLength; k++)        //每条线里有几个点   
  61.               {   
  62.                 series.add(xV[k], yV[k]);   
  63.             }  
  64.   
  65.             dataset.addSeries(series);   
  66.         }  
  67.   
  68.         return dataset;   
  69.     }  
  70.   
  71.     protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles, boolean fill)   
  72.     {   
  73.         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();   
  74.         int length = colors.length;   
  75.         for (int i = 0; i < length; i++)   
  76.         {   
  77.             XYSeriesRenderer r = new XYSeriesRenderer();   
  78.             r.setColor(colors[i]);   
  79.             r.setPointStyle(styles[i]);   
  80.             r.setFillPoints(fill);   
  81.             renderer.addSeriesRenderer(r);   
  82.         }   
  83.         return renderer;   
  84.     }  
  85.   
  86.     protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title,   
  87.                                 String xTitle,String yTitle, double xMin,   
  88.                                 double xMax, double yMin, double yMax,   
  89.                                 int axesColor,int labelsColor)   
  90.     {   
  91.         renderer.setChartTitle(title);   
  92.         renderer.setXTitle(xTitle);   
  93.         renderer.setYTitle(yTitle);   
  94.         renderer.setXAxisMin(xMin);   
  95.         renderer.setXAxisMax(xMax);   
  96.         renderer.setYAxisMin(yMin);   
  97.         renderer.setYAxisMax(yMax);   
  98.         renderer.setAxesColor(axesColor);   
  99.         renderer.setLabelsColor(labelsColor);   
  100.     }   
  101. }  

更多相关文章

  1. android OTA差分包的生成方法
  2. multipart/form-data图片上传实现方法
  3. Android(安卓)解决adb server is out of date. killing... ADB s
  4. Android(安卓)自定义LayoutManager
  5. Android(安卓)inflate的三种使用方法
  6. 【Android(安卓)界面效果43】Android(安卓)LayoutInflater的infl
  7. Android开发之MediaPlayer使用
  8. Android从零开始(十五)
  9. Android(安卓)strings.xml中空格符的标识方法附xml特殊字符表示

随机推荐

  1. Shell脚本中的while getopts用法小结
  2. 全文检索技术ElasticSearch使用
  3. 【js效果】倒计时
  4. 【DB笔试面试672】在Oracle中,errorstack
  5. 【DB笔试面试660】在Oracle中,在编译存储
  6. Nodejs 开发CLI必备基础依赖库
  7. CXF实现WebService入门
  8. JS 中的 Reflect 和 Proxy
  9. Rxjs给应用带来的优势
  10. 【DB笔试面试659】在Oracle中,SELECT ...