安卓图表引擎AChartEngine 使用

本文介绍了如何在安卓应用中使用AChartEngine库来创建图表。首先,提供了下载AChartEngine jar包的链接和提取码。接着,讲解了创建图表的相关接口设计,并详细阐述了在Activity中如何集成和使用该图表引擎。

1.下载jar包:链接地址:点击打开链接 (提取码:bf9d)

2.创建接口

package com.cnten.demo.graph;

import android.content.Context;
import android.content.Intent;

/**
 * 演示图表的接口
 */
public interface IDemoChart {

	/** 图表的名称 */
	String NAME = "name";
	/** 图描述 */
	String DESC = "desc";

	/**
	 * 返回返回图表的名称
	 * 
	 * @return the chart name
	 */
	String getName();

	/**
	 * 返回图描述
	 * 
	 * @return the chart description
	 */
	String getDesc();

	/**
	 * 执行图演示。
	 * 
	 * @param context
	 *            the context
	 * @return the built intent
	 */
	Intent execute(Context context);

}
3 .创建一个抽象类

package com.cnten.demo.graph;

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;

/**
 * 演示图表的一个抽象类来扩展。它包含一些方法
 */
public abstract class AbstractDemoChart implements IDemoChart {

	/**
	 * 构建一个XY多个数据集使用提供的值。
	 * 
	 * @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;
	}

	/**
	 * 添加图表中显示的数据
	 * 
	 * @param dataset
	 * @param titles
	 * @param xValues
	 * @param yValues
	 * @param scale
	 */
	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);
		}
	}

	/**
	 * 一个常数名称字段的活动列表。
	 * 
	 * @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);
		}
	}

	/**
	 * 渲染器设置
	 * 
	 * @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);
	}

	/**
	 * 构建一个XY多个数据集使用提供的值。
	 * 
	 * @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;
	}

	/**
	 * 构建一个提示文字值
	 * 
	 * @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;
	}

	/**
	 * 建立多个类别系列使用提供的值。
	 * 
	 * @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;
	}

	/**
	 * 构建一个类别渲染器使用提供的颜色
	 * 
	 * @param colors
	 *            the colors
	 * @return the category renderer
	 */
	protected DefaultRenderer buildCategoryRenderer(int[] colors) {
		DefaultRenderer renderer = new DefaultRenderer();// 实例化 DefaultRenderer
		renderer.setLabelsTextSize(25);// 设置內容文本大小。
		renderer.setLegendTextSize(20);// 设置标签提示文本大小
		renderer.setMargins(new int[] { 20, 30, 15, 0 });// 设置margin属性
		for (int color : colors) {
			SimpleSeriesRenderer r = new SimpleSeriesRenderer();// 构建一个简单的渲染器
			r.setColor(color);// 设置颜色
			renderer.addSeriesRenderer(r);// 添加一个简单的多个渲染器渲染器。
		}
		return renderer;
	}

	/**
	 * 构建一个酒吧多个系列数据集使用提供的值。
	 * 
	 * @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;
	}

	/**
	 * 构建一系列酒吧多个渲染器使用提供的颜色
	 * 
	 * @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;
	}

}
4.创建一个圆环

package com.cnten.demo.graph;

import org.achartengine.ChartFactory;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;

/**
 * 圆饼
 * 
 * @author Administrator
 * 
 */
public class RoundGraph extends AbstractDemoChart {

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getDesc() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Intent execute(Context context) {
		double[] values = new double[] { 12, 14, 11, 10, 19 };
		int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.MAGENTA,
				Color.YELLOW, Color.CYAN };
		/**
		 * DefaultRenderer :一个抽象的渲染器由多个系列类扩展;
		 * buildCategoryRenderer():构建一个类别渲染器使用提供的颜色
		 */
		DefaultRenderer renderer = buildCategoryRenderer(colors);
		renderer.setZoomButtonsVisible(false);// 设置变焦按钮是否可见
		renderer.setZoomEnabled(false);// 设置变焦的启用状态
		renderer.setChartTitleTextSize(20);// 设置图表文字大小
		renderer.setDisplayValues(true);// 设置是否显示文本
		renderer.setShowLabels(true);// 设置标签是否可见
		SimpleSeriesRenderer r = renderer.getSeriesRendererAt(0);// 返回指定的渲染器
		r.setGradientEnabled(true);// 设置是否渐变
		r.setGradientStart(0, Color.BLUE);// 设置渐变开始值
		r.setGradientStop(0, Color.GREEN);// 设置渐变结束值
		r.setHighlighted(true);// 设置是否突出
		/**
		 * 创建一个饼图 CategorySeries dataset:, DefaultRenderer renderer:, String
		 * activityTitle
		 */
		Intent intent = ChartFactory.getPieChartIntent(context,
				buildCategoryDataset("Project budget", values), renderer, "图表");
		return intent;
	}

}

5.activity中使用

package com.cnten.demo;

import com.cnten.demo.graph.AverageTemperatureChart;
import com.cnten.demo.graph.RoundGraph;
import com.cnten.demo.graph.TemperatureChart;
import com.cnten.demo.graph.WeightDialChart;

import android.os.Bundle;
import android.app.ListActivity;
import android.content.Intent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ListActivity {

	private String[] title = new String[] { "圆饼", "仪表盘", "折线图", "双线折线图", "雷达图" };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setListAdapter(new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, title));

	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);
		Intent intent = null;
		switch (position) {
		case 0:
			intent = new RoundGraph().execute(this);
			break;
		case 1:
			intent = new WeightDialChart().execute(this);
			break;
		case 2:
			intent = new AverageTemperatureChart().execute(this);
			break;
		case 3:
			intent = new TemperatureChart().execute(this);
			break;
		case 4:
			intent = new Intent(this, SendActivity.class);
			break;
		}
		startActivity(intent);
	}

}
6.apk下载地址: 点击打开链接   访问密码 53da


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值