使用AChartEngine画动态柱状图:

1.定义类:

package com.example.test.achartengine;import java.util.Date;import java.util.List;import org.achartengine.chart.PointStyle;import org.achartengine.model.CategorySeries;import org.achartengine.model.MultipleCategorySeries;import org.achartengine.model.TimeSeries;import org.achartengine.model.XYMultipleSeriesDataset;import org.achartengine.model.XYSeries;import org.achartengine.renderer.DefaultRenderer;import org.achartengine.renderer.SimpleSeriesRenderer;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;/** * An abstract class for the demo charts to extend. It contains some methods for building datasets and renderers. */public class AbstractDemoChart {/** * Builds an XY multiple dataset using the provided values. *  * @param titles *            the series titles * @param xValues *            the values for the X axis * @param yValues *            the values for the Y axis * @return the XY multiple dataset */protected XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) {XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();addXYSeries(dataset, titles, xValues, yValues, 0);return dataset;}public 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);}}/** * Builds an XY multiple series renderer. *  * @param colors *            the series rendering colors * @param styles *            the series point styles * @return the XY multiple series renderers */protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();setRenderer(renderer, colors, styles);return renderer;}protected 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);}}/** * Sets a few of the series renderer settings. *  * @param renderer *            the renderer to set the properties to * @param title *            the chart title * @param xTitle *            the title for the X axis * @param yTitle *            the title for the Y axis * @param xMin *            the minimum value on the X axis * @param xMax *            the maximum value on the X axis * @param yMin *            the minimum value on the Y axis * @param yMax *            the maximum value on the Y axis * @param axesColor *            the axes color * @param labelsColor *            the labels color */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);}/** * Builds an XY multiple time dataset using the provided values. *  * @param titles *            the series titles * @param xValues *            the values for the X axis * @param yValues *            the values for the Y axis * @return the XY multiple time dataset */protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List<Date[]> xValues, List<double[]> yValues) {XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();int length = titles.length;for (int i = 0; i < length; i++) {TimeSeries series = new TimeSeries(titles[i]);Date[] 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);}return dataset;}/** * Builds a category series using the provided values. *  * @param titles *            the series titles * @param values *            the values * @return the category series */protected CategorySeries buildCategoryDataset(String title, double[] values) {CategorySeries series = new CategorySeries(title);int k = 0;for (double value : values) {series.add("Project " + ++k, value);}return series;}/** * Builds a multiple category series using the provided values. *  * @param titles *            the series titles * @param values *            the values * @return the category series */protected MultipleCategorySeries buildMultipleCategoryDataset(String title, List<String[]> titles, List<double[]> values) {MultipleCategorySeries series = new MultipleCategorySeries(title);int k = 0;for (double[] value : values) {series.add(2007 + k + "", titles.get(k), value);k++;}return series;}/** * Builds a category renderer to use the provided colors. *  * @param colors *            the colors * @return the category renderer */protected DefaultRenderer buildCategoryRenderer(int[] colors) {DefaultRenderer renderer = new DefaultRenderer();renderer.setLabelsTextSize(15);renderer.setLegendTextSize(15);renderer.setMargins(new int[] { 20, 30, 15, 0 });for (int color : colors) {SimpleSeriesRenderer r = new SimpleSeriesRenderer();r.setColor(color);renderer.addSeriesRenderer(r);}return renderer;}/** * Builds a bar multiple series dataset using the provided values. *  * @param titles *            the series titles * @param values *            the values * @return the XY multiple bar dataset */protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) {XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();int length = titles.length;for (int i = 0; i < length; i++) {CategorySeries series = new CategorySeries(titles[i]);double[] v = values.get(i);int seriesLength = v.length;for (int k = 0; k < seriesLength; k++) {series.add(v[k]);}dataset.addSeries(series.toXYSeries());}return dataset;}/** * Builds a bar multiple series renderer to use the provided colors. *  * @param colors *            the series renderers colors * @return the bar multiple series renderer */protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();renderer.setAxisTitleTextSize(16);renderer.setChartTitleTextSize(20);renderer.setLabelsTextSize(15);renderer.setLegendTextSize(15);int length = colors.length;for (int i = 0; i < length; i++) {SimpleSeriesRenderer r = new SimpleSeriesRenderer();r.setColor(colors[i]);renderer.addSeriesRenderer(r);}return renderer;}}

柱状图类:

package com.example.test.achartengine;import java.util.ArrayList;import java.util.List;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chart.BarChart.Type;import org.achartengine.model.XYMultipleSeriesDataset;import org.achartengine.renderer.XYMultipleSeriesRenderer;import android.content.Context;import android.graphics.Color;import android.graphics.Paint.Align;public class DynamicBarChart {public AbstractDemoChart abstractDemoChart;public XYMultipleSeriesRenderer renderer;public XYMultipleSeriesDataset dataset;public GraphicalView chartView;private Context context;private int[] colors;private String[] titles;private List<double[]> values;public DynamicBarChart(Context context) {super();// TODO Auto-generated constructor stubthis.context = context;abstractDemoChart = new AbstractDemoChart();init();}private void init() {titles = new String[] { "2014" };values = new ArrayList<double[]>();values.add(new double[] { 14230, 12300, 14240, 15244, 15900, 19200, 22030, 21200, 19500, 15500, 12600, 14000 });colors = new int[] { Color.GRAY };renderer = abstractDemoChart.buildBarRenderer(colors);renderer.setXLabels(12);renderer.setYLabels(10);renderer.setXLabelsAlign(Align.LEFT);renderer.setYLabelsAlign(Align.LEFT);renderer.setPanEnabled(true, false);// renderer.setZoomEnabled(false);renderer.setZoomRate(1.1f);renderer.setBarSpacing(0.5f);abstractDemoChart.setChartSettings(renderer, "Monthly sales", "Month", "Units sold", 0.5, 12.5, 0, 24000, Color.GRAY, Color.LTGRAY);dataset = abstractDemoChart.buildBarDataset(titles, values);chartView = ChartFactory.getBarChartView(context, dataset, renderer, Type.DEFAULT);}public void setView() {dataset = abstractDemoChart.buildBarDataset(titles, values);chartView = ChartFactory.getBarChartView(context, dataset, renderer, Type.DEFAULT);}public void setValues(List<double[]> values) {this.values = values;}public GraphicalView getChartView() {return chartView;}}

2.使用方法:

private void addDynamicBarchart(Context context) {mDynamicBarChartLayout = (LinearLayout) findViewById(R.id.dynamicbarchart);mDynamicBarChart = new DynamicBarChart(context);chartView = mDynamicBarChart.getChartView();chartView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));chartView.setBackgroundColor(Color.BLACK);mDynamicBarChartLayout.addView(chartView);}

private void updateChart() {updateVaules(); //更新ValuesmDynamicBarChart.setValues(values);mDynamicBarChart.setView();mDynamicBarChartLayout.removeAllViews();chartView = mDynamicBarChart.getChartView();chartView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));chartView.setBackgroundColor(Color.BLACK);mDynamicBarChartLayout.addView(chartView);}

参考:http://blog.csdn.net/lk_blog/article/details/7645509

更多相关文章

  1. android 自定义商城app价格正序倒序控件
  2. Android(安卓)Proguard 如何混淆package name
  3. 自定义控件5---TypedArray和AttributeSet
  4. Android(安卓)自定义系统菜单的背景源码
  5. Android(安卓)自定义Progress Bar
  6. android创建自定义对话框
  7. android 验证码 (canvas)
  8. Android(安卓)自定义文本框(带图片)
  9. Android(安卓)自定义滚动视图

随机推荐

  1. 深入Android【一】—— 序及开篇
  2. android (java) 网络发送get/post请求参
  3. 6个必看的Android网站
  4. MVC架构设计与三层模型 & MVP思想精髓与
  5. android webview使用html5 上传相册、拍
  6. Android(安卓)TextView文字横向自动滚动(
  7. Android利用Fiddler进行网络数据抓包
  8. Android(安卓)使用Theme实现动态切换主题
  9. Android简明开发教程十九:线程 Bezier曲线
  10. android中使用线程池和临时缓存优化网络