Android曲线图

效果如下图:

1.  MainActivity.java

[html]  view plain  copy
  1. package com.example.chartview;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import com.example.btview.BingTuActivity;  
  6. import com.example.chartview.modle.Information;  
  7. import com.example.zxtview.ZXTActivity;  
  8. import com.example.zxtview.ZXTActivity02;  
  9. import com.example.zztview.ZZTActivity;  
  10. import com.example.zztview.ZZTActivity02;  
  11.   
  12. import android.app.Activity;  
  13. import android.content.Intent;  
  14.   
  15. import android.os.Bundle;  
  16. import android.view.View;  
  17. import android.view.View.OnClickListener;  
  18. import android.widget.Button;  
  19.   
  20. public class MainActivity extends Activity implements OnClickListener {  
  21.   
  22.     private Button ZZTView, ZXTView, BTView;  
  23.   
  24.     private ArrayList<Information>informations;  
  25.     private ArrayList<Information>informations02;  
  26.     private ArrayList<Information>informations03=new ArrayList<Information>();  
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState) {  
  29.         // TODO Auto-generated method stub  
  30.         super.onCreate(savedInstanceState);  
  31.         setContentView(R.layout.activity_main);  
  32.         ZZTView = (Button) findViewById(R.id.ZZTbutton);  
  33.         ZZTView.setOnClickListener(this);  
  34.         ZXTView = (Button) findViewById(R.id.ZXTbutton);  
  35.         ZXTView.setOnClickListener(this);  
  36.         BTView = (Button) findViewById(R.id.BTbutton);  
  37.         BTView.setOnClickListener(this);  
  38.           
  39.         informations = new ArrayList<Information>();  
  40.         //数据假设 初始化  
  41.           
  42.         informations.add(new Information("福建", "7434832", "人"));  
  43.         informations.add(new Information("广东", "9434832", "人"));  
  44.         informations.add(new Information("浙江", "5434832", "人"));  
  45.         informations.add(new Information("江苏", "7436832", "人"));  
  46.         informations.add(new Information("香港", "7464832", "人"));  
  47.         informations.add(new Information("陕西", "6464832", "人"));  
  48.         informations.add(new Information("上海", "4534832", "人"));  
  49.         informations.add(new Information("北京", "9435832", "人"));  
  50.       
  51.     }  
  52.   
  53.     @Override  
  54.     public void onClick(View v) {  
  55.           
  56.         switch (v.getId()) {  
  57.         case R.id.ZXTbutton:  
  58.             Intent zxt=new Intent(this, ZXTActivity.class);  
  59. //          Intent zxt=new Intent(this, ZXTActivity02.class);  
  60. //          zxt.putExtra("informations", informations);  
  61. //          zxt.putExtra("title", "人口数据");  
  62.             startActivity(zxt);  
  63.   
  64.             break;  
  65.         case R.id.BTbutton:  
  66.             Intent bt=new Intent(this, BingTuActivity.class);  
  67.             bt.putExtra("informations", informations);  
  68.             bt.putExtra("title", "人口数据");  
  69.             startActivity(bt);  
  70.   
  71.             break;  
  72.         case R.id.ZZTbutton:  
  73.             Intent zzt=new Intent(this, ZZTActivity02.class);  
  74.             //Intent zzt=new Intent(this, ZZTActivity.class);  
  75.             zzt.putExtra("informations", informations);  
  76.             zzt.putExtra("title", "人口数据");  
  77.             startActivity(zzt);  
  78.             break;  
  79.   
  80.         default:  
  81.             break;  
  82.         }  
  83.   
  84.     }  
  85.   
  86. }  


2.  ZXTActivity.java(折线图)

[html]  view plain  copy
  1. package com.example.zxtview;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.achartengine.ChartFactory;  
  7. import org.achartengine.chart.PointStyle;  
  8. import org.achartengine.model.XYMultipleSeriesDataset;  
  9. import org.achartengine.model.XYSeries;  
  10. import org.achartengine.renderer.XYMultipleSeriesRenderer;  
  11. import org.achartengine.renderer.XYSeriesRenderer;  
  12.   
  13. import android.os.Bundle;  
  14. import android.app.Activity;  
  15. import android.graphics.Color;  
  16. import android.graphics.Paint.Align;  
  17. import android.view.Menu;  
  18. import android.view.View;  
  19. /**  
  20.  *   
  21.  * @ClassName:  MainActivity     
  22.  * @Description:折线图  1  
  23.  * @author:  张  维  
  24.  * @date:   2016-5-10 下午3:07:30     
  25.  *  
  26.  */  
  27. public class ZXTActivity extends Activity {  
  28.   
  29.     @Override  
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         //图例   
  33.         String[] titles = new String[] { "Crete", "Corfu", "Thassos",  
  34.                 "Skiathos" };  
  35.         List<double[]> x = new ArrayList<double[]>();  
  36.         for (int i = 0; i < titles.length; i++) {  
  37.             //每个序列中点的X坐标   
  38.             x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });  
  39.         }  
  40.         List<double[]> values = new ArrayList<double[]>();  
  41.         //序列2中点的Y坐标    
  42.         values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,  
  43.                 26.1, 23.6, 20.3, 17.2, 13.9 });  
  44.         //序列3中点的Y坐标    
  45.         values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26, 23, 18, 14,  
  46.                 11 });  
  47.         //序列4中点的Y坐标    
  48.         values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24, 19, 15, 9, 6 });  
  49.         //序列5中点的Y坐标    
  50.         values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 });  
  51.         //每个序列的颜色设置  
  52.         int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN,  
  53.                 Color.YELLOW };  
  54.           
  55.         //图表样式枚举器,这个类作用是:在趋势图中各个点的样式,有圆形,三角形,正方形,菱形等  
  56.         PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,  
  57.                 PointStyle.DIAMOND, PointStyle.TRIANGLE, PointStyle.SQUARE };  
  58.         //多个XY系列渲染器。  
  59.         XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);  
  60.         // 得到multiple renderer集合中renderer的个数.并设置图上的点为实心    
  61.         int length = renderer.getSeriesRendererCount();  
  62.           
  63.         for (int i = 0; i < length; i++) {  
  64.             //在multiple renderer中得到指定位置的 renderer.  
  65.             ((XYSeriesRenderer) renderer.getSeriesRendererAt(i))  
  66.                     .setFillPoints(true);  
  67.         }  
  68.         //调用AbstractDemoChart中的方法设置图表的renderer属性.   
  69.         setChartSettings(renderer, "Average temperature", "Month",  
  70.                 "Temperature", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);  
  71.           
  72.         //设置x轴显示12个点,根据setChartSettings的最大值和最小值自动计算点的间隔    
  73.         renderer.setXLabels(12);  
  74.           
  75.         //设置y轴显示10个点,根据setChartSettings的最大值和最小值自动计算点的间隔    
  76.         renderer.setYLabels(10);  
  77.           
  78.         //是否显示网格    
  79.         renderer.setShowGrid(true);  
  80.           
  81.         //x轴,刻度线与刻度标注之间的相对位置关系    
  82.         renderer.setXLabelsAlign(Align.RIGHT);  
  83.           
  84.         //y轴,刻度线与刻度标注之间的相对位置关系  
  85.         renderer.setYLabelsAlign(Align.RIGHT);  
  86.       
  87.         //是否显示放大缩小按钮   
  88.         renderer.setZoomButtonsVisible(true);  
  89.       
  90.         //设置拖动时X轴Y轴允许的最大值最小值.    
  91.         renderer.setPanLimits(new double[] { -10, 20, -10, 40 });  
  92.           
  93.         //设置放大缩小时X轴Y轴允许的最大最小值.    
  94.         renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });  
  95.          
  96.         //构建一个View  
  97.         View view = ChartFactory.getLineChartView(this,  
  98.                 buildDataset(titles, x, values), renderer);  
  99.         view.setBackgroundColor(Color.BLACK);  
  100.           
  101.         setContentView(view);  
  102.     }  
  103.   
  104.       
  105.     private XYMultipleSeriesRenderer buildRenderer(int[] colors,  
  106.             PointStyle[] styles) {  
  107.         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();  
  108.         setRenderer(renderer, colors, styles);  
  109.         return renderer;  
  110.     }  
  111.   
  112.     private void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors,  
  113.             PointStyle[] styles) {  
  114.         renderer.setAxisTitleTextSize(16);  
  115.         renderer.setChartTitleTextSize(20);  
  116.         renderer.setLabelsTextSize(15);  
  117.         renderer.setLegendTextSize(15);  
  118.         renderer.setPointSize(5f);  
  119.         renderer.setMargins(new int[] { 20, 30, 15, 20 });  
  120.         int length = colors.length;  
  121.         for (int i = 0; i < length; i++) {  
  122.             XYSeriesRenderer r = new XYSeriesRenderer();  
  123.             r.setColor(colors[i]);  
  124.             r.setPointStyle(styles[i]);  
  125.             renderer.addSeriesRenderer(r);  
  126.         }  
  127.     }  
  128.     //  
  129.     private void setChartSettings(XYMultipleSeriesRenderer renderer,  
  130.             String title, String xTitle, String yTitle, double xMin,  
  131.             double xMax, double yMin, double yMax, int axesColor,  
  132.             int labelsColor) {  
  133.         renderer.setChartTitle(title);  
  134.         renderer.setXTitle(xTitle);  
  135.         renderer.setYTitle(yTitle);  
  136.         renderer.setXAxisMin(xMin);  
  137.         renderer.setXAxisMax(xMax);  
  138.         renderer.setYAxisMin(yMin);  
  139.         renderer.setYAxisMax(yMax);  
  140.         renderer.setAxesColor(axesColor);  
  141.         renderer.setLabelsColor(labelsColor);  
  142.     }  
  143.   
  144.     private XYMultipleSeriesDataset buildDataset(String[] titles,  
  145.             List<double[]> xValues, List<double[]> yValues) {  
  146.         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
  147.         addXYSeries(dataset, titles, xValues, yValues, 0);  
  148.         return dataset;  
  149.     }  
  150.   
  151.     private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles,  
  152.             List<double[]> xValues, List<double[]> yValues, int scale) {  
  153.         int length = titles.length;  
  154.         for (int i = 0; i < length; i++) {  
  155.             XYSeries series = new XYSeries(titles[i], scale);  
  156.             double[] xV = xValues.get(i);  
  157.             double[] yV = yValues.get(i);  
  158.             int seriesLength = xV.length;  
  159.             for (int k = 0; k < seriesLength; k++) {  
  160.                 series.add(xV[k], yV[k]);  
  161.             }  
  162.             dataset.addSeries(series);  
  163.         }  
  164.     }  
  165.   
  166. }  

3.  ZXTActivity.java(柱状图)

[html]  view plain  copy
  1. package com.example.zztview;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import org.achartengine.ChartFactory;  
  6. import org.achartengine.chart.BarChart.Type;  
  7. import org.achartengine.model.CategorySeries;  
  8. import org.achartengine.model.XYMultipleSeriesDataset;  
  9. import org.achartengine.renderer.SimpleSeriesRenderer;  
  10. import org.achartengine.renderer.XYMultipleSeriesRenderer;  
  11.   
  12. import android.app.Activity;  
  13. import android.graphics.Color;  
  14. import android.os.Bundle;  
  15. import android.view.View;  
  16.   
  17. import com.example.chartview.modle.Information;  
  18.   
  19. /**  
  20.  *   
  21.  * @ClassName: ZZTActivity02  
  22.  * @Description: 柱状图 2  
  23.  * @author: 张 维  
  24.  * @date: 2016-5-11 上午10:42:15  
  25.  *   
  26.  */  
  27. public class ZZTActivity02 extends Activity {  
  28.   
  29.     private ArrayList<Information> list;  
  30.     private String title;  
  31.     private double maxValue = 0; // 数据的最大值  
  32.   
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         // TODO Auto-generated method stub  
  36.         super.onCreate(savedInstanceState);  
  37.         initCompont();  
  38.           
  39.         View view = ChartFactory.getBarChartView(this, getBarDataset(list),  
  40.                 getBarRenderer(list), Type.STACKED); // Type.STACKED  
  41.         view.setBackgroundColor(Color.BLACK);  
  42.         setContentView(view);  
  43.   
  44.     }  
  45.   
  46.     /**  
  47.      * 初始化数据  
  48.      *   
  49.      * @param titles  
  50.      * @return  
  51.      */  
  52.     private void initCompont() {  
  53.   
  54.         list = (ArrayList<Information>) getIntent().getSerializableExtra(  
  55.                 "informations");  
  56.         title = getIntent().getStringExtra("title");  
  57.         // 算出所有数据的最大值  
  58.         for (Information information : list) {  
  59.             double value = Double.parseDouble(information.dulian1);  
  60.             if (value > maxValue) {  
  61.                 maxValue = value;  
  62.             }  
  63.         }  
  64.         maxValue = maxValue + (maxValue / 8); // 让左边刻度线高出数字的最大值  
  65.     }  
  66.   
  67.     // 描绘器设置  
  68.     public XYMultipleSeriesRenderer getBarRenderer(  
  69.             ArrayList<Information> informations) {  
  70.         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();  
  71.         // 通过SimpleSeriesDenderer设置描绘器的颜色  
  72.         SimpleSeriesRenderer r = new SimpleSeriesRenderer();  
  73.         r.setColor(Color.rgb(1, 128, 205)); // 定义柱状图的颜色  
  74.         renderer.addSeriesRenderer(r);  
  75.   
  76.         setChartSettings(renderer, informations);// 设置描绘器的其他属性  
  77.         return renderer;  
  78.     }  
  79.   
  80.     private void setChartSettings(XYMultipleSeriesRenderer renderer,  
  81.             ArrayList<Information> informations) {  
  82.         // renderer.setChartTitle("个人收支表");// 设置柱图名称  
  83.         // renderer.setXTitle("名单");// 设置X轴名称  
  84.         // renderer.setYTitle("数量");// 设置Y轴名称  
  85.         renderer.setXAxisMin(0.5);// 设置X轴的最小值为0.5  
  86.         renderer.setXAxisMax(5.5);// 设置X轴的最大值为5  
  87.         renderer.setYAxisMin(0);// 设置Y轴的最小值为0  
  88.         renderer.setYAxisMax(maxValue);// 设置Y轴最大值为500  
  89.         renderer.setDisplayChartValues(true); // 设置是否在柱体上方显示值  
  90.         renderer.setShowGrid(true);// 设置是否在图表中显示网格  
  91.         renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数  
  92.         renderer.setBarSpacing(0.2); // 柱状间的间隔  
  93.         renderer.setZoomButtonsVisible(true);  
  94.         // 为X轴的每个柱状图设置底下的标题 比如 福建 ,广东.....  
  95.         int count = 1;  
  96.         for (Information information : informations) {  
  97.             renderer.addXTextLabel(count, information.weidu);  
  98.             count++;  
  99.         }  
  100.   
  101.     }  
  102.   
  103.     // 数据设置  
  104.     private XYMultipleSeriesDataset getBarDataset(  
  105.             ArrayList<Information> informations) {  
  106.         XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();  
  107.         CategorySeries series = new CategorySeries(title + " (单位:"  
  108.                 + informations.get(0).dw + ")");  
  109.         // 声明一个柱形图  
  110.         // 为柱形图添加值  
  111.         for (Information information : informations) {  
  112.             series.add(Double.parseDouble(information.dulian1));  
  113.         }  
  114.         dataset.addSeries(series.toXYSeries());// 添加该柱形图到数据设置列表  
  115.   
  116.         return dataset;  
  117.     }  
  118. }  

3.  BingTuActivity.java(饼图)

[html]  view plain  copy
  1. package com.example.btview;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import org.achartengine.ChartFactory;  
  6. import org.achartengine.GraphicalView;  
  7. import org.achartengine.chartdemo.demo.R;  
  8. import org.achartengine.chartdemo.demo.chart.PieChartBuilder;  
  9. import org.achartengine.model.CategorySeries;  
  10. import org.achartengine.model.SeriesSelection;  
  11. import org.achartengine.renderer.DefaultRenderer;  
  12. import org.achartengine.renderer.SimpleSeriesRenderer;  
  13.   
  14. import com.example.chartview.modle.Information;  
  15.   
  16. import android.app.Activity;  
  17. import android.graphics.Color;  
  18. import android.os.Bundle;  
  19. import android.view.View;  
  20. import android.view.ViewGroup.LayoutParams;  
  21. import android.widget.Button;  
  22. import android.widget.EditText;  
  23. import android.widget.LinearLayout;  
  24. import android.widget.Toast;  
  25. /**  
  26.  *   
  27.  * @ClassName:  BingTuActivity     
  28.  * @Description:饼图  
  29.  * @author:  张  维  
  30.  * @date:   2016-5-11 上午11:32:33     
  31.  *  
  32.  */  
  33. public class BingTuActivity extends Activity {  
  34.   
  35.     private ArrayList<Information> list;  
  36.     private int[] colorsArr;  
  37.     private String title;  
  38.   
  39.     @Override  
  40.     public void onCreate(Bundle savedInstanceState) {  
  41.         super.onCreate(savedInstanceState);  
  42.         initData();  
  43.         // 把分布的颜色传给渲染器  
  44.         DefaultRenderer renderer = buildCategoryRenderer(colorsArr);   
  45.         renderer.setZoomButtonsVisible(true);  
  46.         renderer.setZoomEnabled(true);//  
  47.         renderer.setChartTitleTextSize(20);  
  48.         renderer.setInScroll(true);  
  49.         // View view = ChartFactory.getPieChartView(this,  
  50.         // buildCategoryDataset("Project budget", values), renderer);  
  51.         // 饼状图文字信息和对应的百分比  
  52.         View view = ChartFactory.getPieChartView(this,  
  53.                 buildCategoryDataset("Project budget", list), renderer);  
  54.         view.setBackgroundColor(Color.BLACK);  
  55.   
  56.         setContentView(view);  
  57.   
  58.     }  
  59.   
  60.     /**  
  61.      * 初始化数据  
  62.      */  
  63.     private void initData() {  
  64.         // 获取main传来的集合  
  65.         list = (ArrayList<Information>) getIntent().getSerializableExtra(  
  66.                 "informations");  
  67.         title = getIntent().getStringExtra("title"); // 设置标题  
  68.         // 把数据所需颜色复制到数组  
  69.         int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.MAGENTA,  
  70.                 Color.YELLOW, Color.CYAN, Color.BLUE, Color.GREEN, Color.CYAN };  
  71.         colorsArr = new int[list.size()];  
  72.         for (int i = 0; i < list.size(); i++) {  
  73.             colorsArr[i] = colors[i];  
  74.             // colorsArr[i]= IConstant.colorLib[i];  
  75.         }  
  76.   
  77.     }  
  78.   
  79.     /**  
  80.      * 把分布的颜色传给渲染器  
  81.      *   
  82.      * @param colors  
  83.      * @return  
  84.      */  
  85.     protected DefaultRenderer buildCategoryRenderer(int[] colors) {  
  86.         DefaultRenderer renderer = new DefaultRenderer();  
  87.         renderer.setLabelsTextSize(15);  
  88.         renderer.setLegendTextSize(15);  
  89.         renderer.setMargins(new int[] { 20, 30, 15, 0 });  
  90.         renderer.setChartTitle(title);  
  91.         for (int color : colors) {  
  92.             SimpleSeriesRenderer r = new SimpleSeriesRenderer();  
  93.             r.setColor(color);  
  94.             renderer.addSeriesRenderer(r);  
  95.         }  
  96.         return renderer;  
  97.     }  
  98.   
  99.     /**  
  100.      * 饼状图文字信息  
  101.      *   
  102.      * @param title  
  103.      * @param values  
  104.      * @return  
  105.      */  
  106.     protected CategorySeries buildCategoryDataset(String title,  
  107.             ArrayList<Information> list) {  
  108.         CategorySeries series = new CategorySeries(title);  
  109.         // 根据list值分配视图 颜色  
  110.         for (Information information : list) {  
  111.             double num = Double.parseDouble(information.dulian1);  
  112.             series.add(information.weidu + " (" + information.dulian1  
  113.                     + information.dw + ")", num);  
  114.         }  
  115.         return series;  
  116.     }  
  117. }  

4.  Information.java

[html]  view plain  copy
  1. package com.example.chartview.modle;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. /**  
  6.  *   
  7.  * @ClassName: Information  
  8.  * @Description:实体类  
  9.  * @author: 张 维  
  10.  * @date: 2016-5-11 上午11:34:38  
  11.  *   
  12.  */  
  13. public class Information implements Serializable {  
  14.   
  15.     public String weidu; // 名称  
  16.     public String dulian1; // 数据  
  17.     public String bfb; // 百分比  
  18.     public String dw; // 单位  
  19.   
  20.     public Information(String weidu, String dulian1, String dw) {  
  21.         super();  
  22.         this.weidu = weidu;  
  23.         this.dulian1 = dulian1;  
  24.         this.dw = dw;  
  25.     }  
  26.   
  27.     public Information() {  
  28.     }  
  29.   
  30. }  

本文参考:http://my.oschina.net/totome911/blog/94692?fromerr=ZQA5ytI5

饼图与柱状图基本一样,只是稍微修改了一点,折线图不是原文的。


转自:http://blog.csdn.net/zhang106209/article/details/51373233

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值