Android Chart图开源库AChartEngine教程

由于要用到统计功能,所以想用Chart图来直观的显示,研究了一下网上的资源。发现了AChartEngine。AChartEngine的代码托管在Google上。项目主页:项目源码:目前项目的最新版本是1.0,也是一个比较稳定的版本。闲话少说,先看一下软件运行的截图。教程中的源码在本文最后可以下载。

先来看一下主界面的代码:[mw_shl_code=java,true]package com.manyou.androidchart;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;import com.manyou.androidchart.chart.BarChart;import com.manyou.androidchart.chart.PieChart;/*** 主界面* @package com.manyou.androidchart* @FileName MainActivity.java* @Author APKBUS-manyou* @Date 2013-1-30*/public class MainActivity extends Activity implements OnClickListener {/*** 柱状图*/private Button barButton;/*** 饼图*/private Button pieButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);barButton = (Button) findViewById(R.id.bar);pieButton = (Button) findViewById(R.id.pie);barButton.setOnClickListener(this);pieButton.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bar:Intent lineIntent = new BarChart().getIntent(this);startActivity(lineIntent);break;case R.id.pie:Intent pieIntent = new PieChart().getIntent(this); startActivity(pieIntent);break;}}}[/mw_shl_code]主界面的代码很简单,2个按钮,第一个按钮跳转到柱状图,第二个按钮跳转到饼图。重要的是BarChart类和PieChart类,这两个类用来生成跳转的Intent。下面我会详细讲解。再来看一下Chart图接口代码,接口只提供一个方法,getIntent(),这个方法返回了一个可以跳转的Intent。[mw_shl_code=java,true]package com.manyou.androidchart.chart;import android.content.Context;import android.content.Intent;/*** 一个AChart接口* @Package com.manyou.androidchart* @FileName AChartAbstract.java* @Author APKBUS-manyou* @Date 2013-1-30*/public interface AChartAbstract {/*** 获取一个当前类型图标的Intent实例*/public Intent getIntent(Context context);}[/mw_shl_code]再看BarChart类和PieChart类之前我先说一下AChartEngine画图必须的2个部分。1. Renderer 渲染器如果以前接触过Java Swing的巴友肯定用过DefaultTableCellRenderer,DefaultTableCellRenderer控制Swing中JTable一个单元格的渲染行为。而AChartEngine中的Renderer和DefaultTableCellRenderer的作用很相似,是用来绘制chart图的,里面包含了chart图所有的属性配置。2. 数据源每个chart图都有自己特定的数据源。首先来看一下柱状图部分的代码:[mw_shl_code=java,true]package com.manyou.androidchart.chart;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.content.Context;import android.content.Intent;import android.graphics.Color;import android.graphics.Paint.Align;/*** 柱状图* * @Package com.manyou.androidchart* @FileName BarChart.java* @Author APKBUS-manyou* @Date 2013-1-30*/public class BarChart implements AChartAbstract {public Intent getIntent(Context context) {return ChartFactory.getBarChartIntent(context, getDataSet(), getRenderer(), Type.STACKED, "2012年公司利润");}/*** 构造数据* @return*/public XYMultipleSeriesDataset getDataSet() {// 构造数据XYMultipleSeriesDataset barDataset = new XYMultipleSeriesDataset();CategorySeries barSeries = new CategorySeries("2012年");barSeries.add(43.1);barSeries.add(27.2);barSeries.add(55.3);barSeries.add(43.4);barSeries.add(68.5);barSeries.add(12.6);barSeries.add(28.7);barSeries.add(33.8);barSeries.add(99.9);barSeries.add(128.0);barSeries.add(56.1);barSeries.add(77.2);barDataset.addSeries(barSeries.toXYSeries());return barDataset;}/*** 构造渲染器* @return*/public XYMultipleSeriesRenderer getRenderer() {XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();renderer.setChartTitle("2012年公司利润");renderer.setXTitle("月份");renderer.setYTitle("利润(万元)");renderer.setAxesColor(Color.WHITE);renderer.setLabelsColor(Color.WHITE);// 设置X轴的最小数字和最大数字,由于我们的数据是从1开始,,所以设置为0.5就可以在1之前让出一部分// 有兴趣的童鞋可以删除下面两行代码看一下效果renderer.setXAxisMin(0.5);renderer.setXAxisMax(12.5);// 设置Y轴的最小数字和最大数字renderer.setYAxisMin(10);renderer.setYAxisMax(150);// 设置渲染器显示缩放按钮renderer.setZoomButtonsVisible(true);// 设置渲染器允许放大缩小renderer.setZoomEnabled(true);// 消除锯齿renderer.setAntialiasing(true);// 设置背景颜色renderer.setApplyBackgroundColor(true);renderer.setBackgroundColor(Color.GRAY);// 设置每条柱子的颜色SimpleSeriesRenderer sr = new SimpleSeriesRenderer();sr.setColor(Color.YELLOW);renderer.addSeriesRenderer(sr);// 设置每个柱子上是否显示数值renderer.getSeriesRendererAt(0).setDisplayChartValues(true);// X轴的近似坐标数renderer.setXLabels(12);// Y轴的近似坐标数renderer.setYLabels(5);// 刻度线与X轴坐标文字左侧对齐renderer.setXLabelsAlign(Align.LEFT);// Y轴与Y轴坐标文字左对齐renderer.setYLabelsAlign(Align.LEFT);// 允许左右拖动,但不允许上下拖动.renderer.setPanEnabled(true, false);// 柱子间宽度renderer.setBarSpacing(0.1f);return renderer;}}[/mw_shl_code]代码中常用的配置我已经给大家写出来了,而且写了比较清楚的注释。想告诉大家的是,这只是一部分属性,AChartEngine渲染器属性绝对不止这一些,有兴趣的巴友可以去查看一下API,不过是英文的。AChartEngine API可以在中下载。代码中getRenderer方法就是初始化渲染器,getDataSet方法就是初始化数据源。ChartFactory.getBarChartIntent()方法就是用来创建一个柱状图的Intent以供跳转。细心的巴友可能会问,这个Intent是不是要跳转到一个Activity中呢?这个Activity是不是AChartEngine创建的呢?要不要再AndroidManifest.xml中配置呢?答案是肯定的。使用AChartEngine绘制chart图要在AndroidManifest.xml中注册org.achartengine.GraphicalActivity.[mw_shl_code=xhtml,true]<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=""package="com.manyou.androidchart"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.manyou.androidchart.MainActivity"android:label="@string/app_name" android:screenOrientation="portrait"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name="org.achartengine.GraphicalActivity" /></application></manifest>[/mw_shl_code]而绘制饼图的时候与绘制柱状图基本上是类似的。使用ChartFactory.getPieChartIntent()方法就可以返回一个饼图的Intent。[mw_shl_code=java,true]package com.manyou.androidchart.chart;import org.achartengine.ChartFactory;import org.achartengine.model.CategorySeries;import org.achartengine.renderer.DefaultRenderer;import org.achartengine.renderer.SimpleSeriesRenderer;import android.content.Context;import android.content.Intent;import android.graphics.Color;/*** 饼图* * @Package com.manyou.androidchart* @FileName PieChart.java* @Author APKBUS-manyou* @Date 2013-1-30*/public class PieChart implements AChartAbstract {public Intent getIntent(Context context) {return ChartFactory.getPieChartIntent(context, getDataSet(), getPieRenderer(), "手机开发者比例(饼图)");}/*** 构造饼图数据*/private CategorySeries getDataSet() {// 构造数据CategorySeries pieSeries = new CategorySeries("手机开发者比例");pieSeries.add("Android", 28);pieSeries.add("IOS", 46);pieSeries.add("其他", 26);return pieSeries;}/*** 获取一个饼图渲染器*/private DefaultRenderer getPieRenderer() {// 构造一个渲染器DefaultRenderer renderer = new DefaultRenderer();// 设置渲染器显示缩放按钮renderer.setZoomButtonsVisible(true);// 设置渲染器允许放大缩小renderer.setZoomEnabled(true);// 设置渲染器标题文字大小renderer.setChartTitleTextSize(20);// 给渲染器增加3种颜色SimpleSeriesRenderer yellowRenderer = new SimpleSeriesRenderer();yellowRenderer.setColor(Color.YELLOW);SimpleSeriesRenderer blueRenderer = new SimpleSeriesRenderer();blueRenderer.setColor(Color.BLUE);SimpleSeriesRenderer redRenderer = new SimpleSeriesRenderer();redRenderer.setColor(Color.RED);renderer.addSeriesRenderer(yellowRenderer);renderer.addSeriesRenderer(blueRenderer);renderer.addSeriesRenderer(redRenderer);// 设置饼图文字字体大小和饼图标签字体大小renderer.setLabelsTextSize(15);renderer.setLegendTextSize(15);// 消除锯齿renderer.setAntialiasing(true);// 设置背景颜色renderer.setApplyBackgroundColor(true);renderer.setBackgroundColor(Color.BLACK);// 设置线条颜色renderer.setAxesColor(Color.WHITE);return renderer;}}[/mw_shl_code]如果想绘制其他的chart图,只要调用响应的ChartFactory.getXXXIntent()即可,关键看方法需要什么类型的渲染器和什么类型的数据源就可以了。本文的实例代码:AndroidChart.zip(1.11 MB, 下载次数: 882)

最好的感觉就是你什么都跟我说。

Android Chart图开源库AChartEngine教程

相关文章:

你感兴趣的文章:

标签云: