效果如下图:
package com.example.chartview; import java.util.ArrayList; import com.example.btview.BingTuActivity; import com.example.chartview.modle.Information; import com.example.zxtview.ZXTActivity; import com.example.zxtview.ZXTActivity02; import com.example.zztview.ZZTActivity; import com.example.zztview.ZZTActivity02; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private Button ZZTView, ZXTView, BTView; private ArrayList<Information>informations; private ArrayList<Information>informations02; private ArrayList<Information>informations03=new ArrayList<Information>(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ZZTView = (Button) findViewById(R.id.ZZTbutton); ZZTView.setOnClickListener(this); ZXTView = (Button) findViewById(R.id.ZXTbutton); ZXTView.setOnClickListener(this); BTView = (Button) findViewById(R.id.BTbutton); BTView.setOnClickListener(this); 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", "人")); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ZXTbutton: Intent zxt=new Intent(this, ZXTActivity.class); // Intent zxt=new Intent(this, ZXTActivity02.class); // zxt.putExtra("informations", informations); // zxt.putExtra("title", "人口数据"); startActivity(zxt); break; case R.id.BTbutton: Intent bt=new Intent(this, BingTuActivity.class); bt.putExtra("informations", informations); bt.putExtra("title", "人口数据"); startActivity(bt); break; case R.id.ZZTbutton: Intent zzt=new Intent(this, ZZTActivity02.class); //Intent zzt=new Intent(this, ZZTActivity.class); zzt.putExtra("informations", informations); zzt.putExtra("title", "人口数据"); startActivity(zzt); break; default: break; } } }
package com.example.zxtview; 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.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.graphics.Paint.Align; import android.view.Menu; import android.view.View; /** * * @ClassName: MainActivity * @Description:折线图 1 * @author: 张 维 * @date: 2016-5-10 下午3:07:30 * */ public class ZXTActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //图例 String[] titles = new String[] { "Crete", "Corfu", "Thassos", "Skiathos" }; List<double[]> x = new ArrayList<double[]>(); for (int i = 0; i < titles.length; i++) { //每个序列中点的X坐标 x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); } List<double[]> values = new ArrayList<double[]>(); //序列2中点的Y坐标 values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4, 26.1, 23.6, 20.3, 17.2, 13.9 }); //序列3中点的Y坐标 values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26, 23, 18, 14, 11 }); //序列4中点的Y坐标 values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24, 19, 15, 9, 6 }); //序列5中点的Y坐标 values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 }); //每个序列的颜色设置 int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN, Color.YELLOW }; //图表样式枚举器,这个类作用是:在趋势图中各个点的样式,有圆形,三角形,正方形,菱形等 PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND, PointStyle.TRIANGLE, PointStyle.SQUARE }; //多个XY系列渲染器。 XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); // 得到multiple renderer集合中renderer的个数.并设置图上的点为实心 int length = renderer.getSeriesRendererCount(); for (int i = 0; i < length; i++) { //在multiple renderer中得到指定位置的 renderer. ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)) .setFillPoints(true); } //调用AbstractDemoChart中的方法设置图表的renderer属性. setChartSettings(renderer, "Average temperature", "Month", "Temperature", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY); //设置x轴显示12个点,根据setChartSettings的最大值和最小值自动计算点的间隔 renderer.setXLabels(12); //设置y轴显示10个点,根据setChartSettings的最大值和最小值自动计算点的间隔 renderer.setYLabels(10); //是否显示网格 renderer.setShowGrid(true); //x轴,刻度线与刻度标注之间的相对位置关系 renderer.setXLabelsAlign(Align.RIGHT); //y轴,刻度线与刻度标注之间的相对位置关系 renderer.setYLabelsAlign(Align.RIGHT); //是否显示放大缩小按钮 renderer.setZoomButtonsVisible(true); //设置拖动时X轴Y轴允许的最大值最小值. renderer.setPanLimits(new double[] { -10, 20, -10, 40 }); //设置放大缩小时X轴Y轴允许的最大最小值. renderer.setZoomLimits(new double[] { -10, 20, -10, 40 }); //构建一个View View view = ChartFactory.getLineChartView(this, buildDataset(titles, x, values), renderer); view.setBackgroundColor(Color.BLACK); setContentView(view); } 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(15); 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.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); } 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); } } }
package com.example.zztview; 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.example.chartview.modle.Information; /** * * @ClassName: ZZTActivity02 * @Description: 柱状图 2 * @author: 张 维 * @date: 2016-5-11 上午10:42:15 * */ public class ZZTActivity02 extends Activity { private ArrayList<Information> list; private String title; private double maxValue = 0; // 数据的最大值 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); initCompont(); View view = ChartFactory.getBarChartView(this, getBarDataset(list), getBarRenderer(list), Type.STACKED); // Type.STACKED view.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.5 renderer.setXAxisMax(5.5);// 设置X轴的最大值为5 renderer.setYAxisMin(0);// 设置Y轴的最小值为0 renderer.setYAxisMax(maxValue);// 设置Y轴最大值为500 renderer.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.example.btview; import java.util.ArrayList; import org.achartengine.ChartFactory; import org.achartengine.GraphicalView; import org.achartengine.chartdemo.demo.R; import org.achartengine.chartdemo.demo.chart.PieChartBuilder; import org.achartengine.model.CategorySeries; import org.achartengine.model.SeriesSelection; import org.achartengine.renderer.DefaultRenderer; import org.achartengine.renderer.SimpleSeriesRenderer; import com.example.chartview.modle.Information; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; /** * * @ClassName: BingTuActivity * @Description:饼图 * @author: 张 维 * @date: 2016-5-11 上午11:32:33 * */ public class BingTuActivity extends Activity { private ArrayList<Information> list; private int[] colorsArr; private String title; @Override public 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"); // 设置标题 // 把数据所需颜色复制到数组 int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.MAGENTA, Color.YELLOW, Color.CYAN, Color.BLUE, Color.GREEN, Color.CYAN }; colorsArr = new int[list.size()]; for (int i = 0; i < list.size(); i++) { colorsArr[i] = colors[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; } }
package com.example.chartview.modle; import java.io.Serializable; /** * * @ClassName: Information * @Description:实体类 * @author: 张 维 * @date: 2016-5-11 上午11:34:38 * */ 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() { } }