使用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. 自定义控件5---TypedArray和AttributeSet
  2. android 自定义商城app价格正序倒序控件
  3. android创建自定义对话框
  4. Android 自定义系统菜单的背景源码
  5. Android视频播放项目总结之 使用Android中的videoView自己定义,暂
  6. Android 自定义滚动视图
  7. Android 自定义文本框(带图片)
  8. Android 自定义View之能力分析图
  9. android中自定义的一个可以弹出类似于提示更新的对话框

随机推荐

  1. Android的绘制文本对象FontMetrics的介绍
  2. Android完全退出应用程序
  3. android键盘挡住界面
  4. Android(安卓)Priority Job Queue使用(1)
  5. android 中的 edittext属性大全
  6. Android中使用httpclient等小结
  7. Android下用Media Player实现一个最简单
  8. Android沉浸式状态栏(包含 小米、魅族)
  9. android 读取本地超大图片
  10. 安卓开发之android使用webview时按后退会