由于这次做的项目需要用到图形报表,找了半天,发现有个第三方的组件AChartEngine,就写了3个常用的饼图,状图,折线,供大家参考

按国际惯例,先上截图,再上代码片段

package com.lee;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import com.lee.modle.Information;/*** * @author * Patata丶* <a href='\"http://www.weibo.com/totome\"' target='\"_blank\"'>http://www.weibo.com/totome</a>**/public class MainAct extends Activity {ArrayList<Information>informations;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main); informations = new ArrayList<Information>();//数据假设 初始化informations.add(new Information("福建", "7434832", "人"));informations.add(new Information("广东", "9434832", "人"));informations.add(new Information("浙江", "5434832", "人"));informations.add(new Information("江苏", "7436832", "人"));informations.add(new Information("香港", "7464832", "人"));informations.add(new Information("陕西", "6464832", "人"));informations.add(new Information("上海", "4534832", "人"));informations.add(new Information("北京", "9435832", "人")); } /*** 按键监听*/public void bing(View view){Intent intent = new Intent(this, Pie_char.class);intent.putExtra("informations", informations);intent.putExtra("title", "人口数据");startActivity(intent);}public void zhu(View view){Intent intent = new Intent(this, Stacked.class);intent.putExtra("informations", informations);intent.putExtra("title", "人口数据");startActivity(intent);}public void zhexian(View view){Intent intent = new Intent(this, Zhexian.class);intent.putExtra("informations", informations);intent.putExtra("title", "人口数据");startActivity(intent);}  }
package com.lee;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import org.achartengine.ChartFactory;import org.achartengine.model.CategorySeries;import org.achartengine.renderer.DefaultRenderer;import org.achartengine.renderer.SimpleSeriesRenderer;import com.lee.modle.Information;  import android.R.integer;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.View;import android.widget.LinearLayout;/*** 饼图* * Patata丶* <a href='\"http://www.weibo.com/totome\"' target='\"_blank\"'>http://www.weibo.com/totome</a>**/public class Pie_char extends Activity {private ArrayList<Information> list;private int[] colorsArr;private String title; @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initData(); DefaultRenderer renderer = buildCategoryRenderer(colorsArr); //把分布的颜色传给渲染器renderer.setZoomButtonsVisible(true);renderer.setZoomEnabled(true);renderer.setChartTitleTextSize(20);renderer.setInScroll(true);// View view = ChartFactory.getPieChartView(this, buildCategoryDataset("Project budget", values), renderer);//饼状图文字信息和对应的百分比View view = ChartFactory.getPieChartView(this, buildCategoryDataset("Project budget", list), renderer);view.setBackgroundColor(Color.BLACK); setContentView(view); }/*** 初始化数据*/private void initData(){//获取main传来的集合list = (ArrayList<Information>) getIntent().getSerializableExtra("informations");title = getIntent().getStringExtra("title"); //设置标题//把数据所需颜色复制到数组colorsArr = new int[list.size()];for (int i = 0; i < list.size(); i++){colorsArr<i> = IConstant.colorLib<i>;}}/*** 把分布的颜色传给渲染器* @param colors* @return*/protected DefaultRenderer buildCategoryRenderer(int[] colors) {DefaultRenderer renderer = new DefaultRenderer();renderer.setLabelsTextSize(15);renderer.setLegendTextSize(15);renderer.setMargins(new int[] { 20, 30, 15, 0 });renderer.setChartTitle(title);for (int color : colors) {SimpleSeriesRenderer r = new SimpleSeriesRenderer();r.setColor(color);renderer.addSeriesRenderer(r);}return renderer;} /*** 饼状图文字信息* @param title* @param values* @return*/protected CategorySeries buildCategoryDataset(String title, ArrayList<Information> list) {CategorySeries series = new CategorySeries(title);//根据list值分配视图 颜色for (Information information : list){double num = Double.parseDouble(information.dulian1);series.add(information.weidu+ " (" + information.dulian1 + information.dw +")" , num);} return series;}}</i></i>
package com.lee;import java.util.ArrayList;import org.achartengine.ChartFactory;import org.achartengine.chart.BarChart.Type;import org.achartengine.model.CategorySeries;import org.achartengine.model.XYMultipleSeriesDataset;import org.achartengine.renderer.SimpleSeriesRenderer;import org.achartengine.renderer.XYMultipleSeriesRenderer;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.View;import com.lee.modle.Information;/*** 柱状图* Patata丶* <a href='\"http://www.weibo.com/totome\"' target='\"_blank\"'>http://www.weibo.com/totome</a>**/public class Stacked extends Activity{private ArrayList<Information> list;private String title;private double maxValue = 0; //数据的最大值@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);initCompont();View view = ChartFactory.getBarChartView(this, getBarDataset(list), getBarRenderer(list), Type.STACKED); //Type.STACKEDview.setBackgroundColor(Color.BLACK);setContentView(view); }/*** 初始化数据* @param titles* @return*/private void initCompont(){list = (ArrayList<Information>) getIntent().getSerializableExtra("informations");title = getIntent().getStringExtra("title");//算出所有数据的最大值for (Information information : list){double value = Double.parseDouble(information.dulian1);if (value > maxValue){maxValue = value;} }maxValue = maxValue + (maxValue/8); //让左边刻度线高出数字的最大值 }// 描绘器设置public XYMultipleSeriesRenderer getBarRenderer(ArrayList<Information> informations){XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();// 通过SimpleSeriesDenderer设置描绘器的颜色SimpleSeriesRenderer r = new SimpleSeriesRenderer();r.setColor(Color.rgb(1, 128, 205)); //定义柱状图的颜色renderer.addSeriesRenderer(r); setChartSettings(renderer, informations);// 设置描绘器的其他属性return renderer;}private void setChartSettings(XYMultipleSeriesRenderer renderer, ArrayList<Information> informations ){//  renderer.setChartTitle("个人收支表");// 设置柱图名称//  renderer.setXTitle("名单");// 设置X轴名称//  renderer.setYTitle("数量");// 设置Y轴名称renderer.setXAxisMin(0.5);// 设置X轴的最小值为0.5renderer.setXAxisMax(5.5);// 设置X轴的最大值为5renderer.setYAxisMin(0);// 设置Y轴的最小值为0renderer.setYAxisMax(maxValue);// 设置Y轴最大值为500renderer.setDisplayChartValues(true); // 设置是否在柱体上方显示值renderer.setShowGrid(true);// 设置是否在图表中显示网格renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数renderer.setBarSpacing(0.2); //柱状间的间隔renderer.setZoomButtonsVisible(true);//为X轴的每个柱状图设置底下的标题 比如 福建 ,广东.....int count=1; for (Information information : informations){renderer.addXTextLabel(count,information.weidu); count++; }   }// 数据设置private XYMultipleSeriesDataset getBarDataset(ArrayList<Information> informations){XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();CategorySeries series = new CategorySeries(title + " (单位:" + informations.get(0).dw + ")");// 声明一个柱形图// 为柱形图添加值for (Information information : informations){series.add(Double.parseDouble(information.dulian1));}dataset.addSeries(series.toXYSeries());// 添加该柱形图到数据设置列表  return dataset;}}
package com.lee;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 com.lee.modle.Information;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.View;/*** 折线图* Patata丶* <a href='\"http://www.weibo.com/totome\"' target='\"_blank\"'>http://www.weibo.com/totome</a>**/public class Zhexian extends Activity{private ArrayList<Information> list;private String title;private double maxValue = 0; //数据的最大值@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initCompont(); //初始化组件String[] titles = new String[] {title}; //表示目前就一条折线信息//List有几条数据List<double[]> x = new ArrayList<double[]>();//X轴所显示的数目 1,2,3,4,5.... 1条数据有几个点信息double[] xInfo = new double[list.size()];int count = 1;for (int i = 0; i < list.size(); i++){xInfo<i> = count;count++;} //折线数量 1for (int i = 0; i < titles.length; i++) {x.add(xInfo);}//折线各个点的值double[] xValue = new double[list.size()];for (int i = 0; i < xValue.length; i++){xValue<i> = Double.parseDouble(list.get(i).dulian1);//把数据最大值赋给maxValueif (xValue<i> > maxValue){maxValue = xValue<i>;}}maxValue = maxValue + (maxValue/8); List<double[]> values = new ArrayList<double[]>();values.add(xValue);int[] colors = new int[] { Color.CYAN};//折线的颜色PointStyle[] styles = new PointStyle[] { PointStyle.DIAMOND}; //折线的样式XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);int length = renderer.getSeriesRendererCount();for (int i = 0; i < length; i++) {((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);}setChartSettings(renderer, title, "", "", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);renderer.setZoomButtonsVisible(true);View view = ChartFactory.getLineChartView(this, buildDataset(titles, x, values), renderer);view.setBackgroundColor(Color.BLACK);setContentView(view);} /*** 初始化数据* @param titles* @return*/private void initCompont(){list = (ArrayList<Information>) getIntent().getSerializableExtra("informations");title = getIntent().getStringExtra("title");title = title + " (单位:" + list.get(0).dw + ")"; //处理null字符串} private XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();setRenderer(renderer, colors, styles);return renderer;}private void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {renderer.setAxisTitleTextSize(16);renderer.setChartTitleTextSize(20);renderer.setLabelsTextSize(12); //标注字renderer.setLegendTextSize(15);renderer.setPointSize(5f);renderer.setMargins(new int[] { 20, 30, 15, 20 });int length = colors.length;for (int i = 0; i < length; i++) {XYSeriesRenderer r = new XYSeriesRenderer();r.setColor(colors<i>);r.setPointStyle(styles<i>);renderer.addSeriesRenderer(r);}}private void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle, String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) {renderer.setYTitle("数量");// 设置Y轴名称renderer.setXAxisMin(0.5);// 设置X轴的最小值为0.5renderer.setXAxisMax(5.5);// 设置X轴的最大值为5renderer.setYAxisMin(0);// 设置Y轴的最小值为0renderer.setYAxisMax(maxValue);// 设置Y轴最大值为500renderer.setDisplayChartValues(true); // 设置是否在柱体上方显示值renderer.setShowGrid(true);// 设置是否在图表中显示网格renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数renderer.setBarSpacing(1);renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数int tempNum = 1;for (Information information : list){renderer.addXTextLabel(tempNum,information.weidu); tempNum++;}}private XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) {XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();addXYSeries(dataset, titles, xValues, yValues, 0);return dataset;}private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues, List<double[]> yValues, int scale) {int length = titles.length;for (int i = 0; i < length; i++) {XYSeries series = new XYSeries(titles<i>, scale);double[] xV = xValues.get(i);double[] yV = yValues.get(i);int seriesLength = xV.length;for (int k = 0; k < seriesLength; k++) {series.add(xV[k], yV[k]);}dataset.addSeries(series);}}}</i></i></i></i></i></i></i>
package com.lee.modle;import java.io.Serializable; public class Information implements Serializable{public String weidu; //名称public String dulian1; //数据public String bfb; //百分比public String dw; //单位  public Information(String weidu, String dulian1, String dw){super();this.weidu = weidu;this.dulian1 = dulian1;this.dw = dw;}  public Information (){}}
  
  
源码demo地址:http://www.kuaipan.cn/file/id_32645732884308999.htm
  
  

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. cocos2d-x在android真机上设置帧率无效的问题
  3. 通知设置Android通知(Notification)示例
  4. Android(安卓)Arrayadapter 获得数据方法
  5. 音乐播放器之简单播放(MediaPlayer、Service、BroadcastRecevier
  6. Android(安卓)自定义弹出对话框实例
  7. Json数据解析
  8. android中的一些权限
  9. Android4.0模拟器“谷歌输入法已停止运行”错误解决办法

随机推荐

  1. Android(安卓)8.1 FreeForm切换显示异常
  2. android中调试之日志
  3. Android PackageManagerService的启动过
  4. android sdk setup时出现:Failed to fetc
  5. Android不依赖Activity的全局悬浮窗实现
  6. Android 选择器 PickerView实例,时间选择
  7. Android图像开源视图:SmartImageView
  8. android ImageView android:adjustViewBo
  9. 系出名门Android(7) - 控件(View)之ZoomC
  10. Android中Parcelable接口的使用