本文原文发表在http://tech.it168.com/a2011/0603/1200/000001200313.shtml
乃本人作品,不得转载

在日常的统计中,经常要用图表来给用户恰当的数据体验,比如用饼状图,柱型图等。在传统的web中,有比较多的开源的这方面的解决方案。本文将简单介绍如何在Android中,如何使用开源工具库来展示图表。

  在Android中,有三种解决方案,分别是:

  1) 使用google 图表 api

  2) 使用Achartengine库(http://www.achartengine.org/)

  3) 使用chartdroid库(http://code.google.com/p/chartdroid/)

  下面分别进行介绍:

  使用google 图表api

  第一种方法是使用google的图表API。可以到如下这个地址去申请使用google 图表API

  (http://code.google.com/apis/chart/)。这个API特别适合去生成饼状图。调用的格式如下即可:

  http://chart.apis.google.com/chart?cht=p3&chd=t:30,60,10&chs=250x100&chl=cars|bikes|trucks

  其中cht=p3表示生成的是一个饼状图;chd=t:30,60,10表示要生成三个部分的数据,分别是30,60,10,当然也可以其他更复杂的数据形式。

  chs=250*100表示的是图型的大小(宽度*高度);chl=cars|bikes|trucks指出了这三部分数据内容的文字标签,即实际上显示在图表上的。

  使用方法很简单,只需要在oncreate事件中如下调用即可:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView googleChartView = new WebView(this);
setContentView(googleChartView);
String mUrl = "http://chart.apis.google.com/chart?cht=p3& chd=t:30,60,10&chs=250x100&chl=cars|bikes|trucks";
googleChartView.loadUrl(mUrl);
}

  因为要连接网络,所以要在配置文件中允许使用网络,在AndroidManifest.xml中如下配置:


[img]http://image20.it168.com/201106_240x180/634/54087b42f0593d34.jpg[/img]
 关于google 图表API更多的资料请参考http://code.google.com/intl/zh-CN/apis/chart/image/docs/making_charts.html

  ,但这种方案有个缺点,就是必须要联上网络,才能访问其API,生成图形。

  2) 使用Achartengine库

  第二种解决方案是使用Achartengine库,下载地址在:

  http://code.google.com/p/achartengine/downloads/list

  ,将其JAR下载后,放到工程的lib包库中,结构如下图:

[img]http://image20.it168.com/201106_240x180/634/7159b9aedfa10324.jpg[/img]
代码如下:

public class AChartExample {
public Intent execute(Context context) {
int[] colors = new int[] { Color.RED, Color.YELLOW, Color.BLUE };
DefaultRenderer renderer = buildCategoryRenderer(colors);
CategorySeries categorySeries = new CategorySeries("Vehicles Chart");
categorySeries.add("cars ", 30);
categorySeries.add("trucks", 20);
categorySeries.add("bikes ", 60);
return ChartFactory.getPieChartIntent(context, categorySeries, renderer);
}

protected DefaultRenderer buildCategoryRenderer(int[] colors) {
DefaultRenderer renderer = new DefaultRenderer();
for (int color : colors) {
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(color);
renderer.addSeriesRenderer(r);
}
return renderer;
}
}

  在上面的代码中,首先将初始化了colors数组,这里指定了饼图的三种颜色,然后在buildCategoryRenderer方法中,使用SimpleSeriesRenderer类实例来进行初始化,分别设置了饼图要显示的系列区域的颜色。而我们将要显示的数据及标签内容都放到categorySeries中进行显示。最后调用ChartFactory的getPieChartIntent方法,传入categorySeries和renderer即可。

  在我们的主类中,进行如下调用:

  Intent achartIntent = new AChartExample().execute(this);

  startActivity(achartIntent);

  最后生成的效果如下图:

[img]http://image20.it168.com/201106_240x180/634/d3e12d0c4c705eb4.jpg[/img]
3) 使用Chartdroid

  第三种方法是使用chartdroid,要注意的是,如果使用这种方法的话,必须先下载并安装Chardroid这个APK,下载地址在:http://code.google.com/p/chartdroid/downloads/list,下载并将其APK包进行安装。

  要使用Chartdroid,必须要使用content provider,我们编写代码如下:

public class ChartDroidDataProvider extends ContentProvider {
static final String AUTHORITY = "com.xyz.contentprovider.chardroid";
@Override
public String getType(Uri uri) {
return "vnd.android.cursor.dir/vnd.com.googlecode.chartdroid.graphable";
}
public static final Uri PROVIDER_URI = new Uri.Builder().scheme(
ContentResolver.SCHEME_CONTENT).authority(AUTHORITY).build();
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {

//获得实际数据
MatrixCursor c = new MatrixCursor(new String[] { BaseColumns._ID,
"COLUMN_AXIS_INDEX", "COLUMN_SERIES_INDEX",
"COLUMN_DATUM_VALUE", "COLUMN_DATUM_LABEL" });

c.newRow().add(1).add(0).add(1).add(30).add(null);
c.newRow().add(2).add(0).add(1).add(10).add(null);
c.newRow().add(3).add(0).add(1).add(60).add(null);

return c;
}

}

  在上面的代码中,我们使用了MatrixCursor生成了相关的数据:30,10,60。关于ChartDroid的详细ContentProvider信息,请参考http://code.google.com/p/chartdroid/wiki/InterfaceSpecification。接下来,我们看使用的代码,如下:

Intent chartDroidIntent = new Intent(Intent.ACTION_VIEW,
ChartDroidDataProvider.PROVIDER_URI);
chartDroidIntent.putExtra(Intent.EXTRA_TITLE, "Chart droid");
chartDroidIntent
.addCategory("com.googlecode.chartdroid.intent.category.PIE_CHART");
startActivity(chartDroidIntent);

  注意,这里要使用charDroidIntent的addCategory方法去指定图表的类型,即

  com.googlecode.chartdroid.intent.category.PIE_CHART。下图是运行效果:

[img]http://image20.it168.com/201106_240x180/634/1f72b09474f5835e.jpg[/img]

更多相关文章

  1. Android(安卓)studio如何指定使用自己生成的keystore调试
  2. Android(安卓)Volley入门到精通:初识Volley的基本用法(示例,出错
  3. Android(安卓)6.0动态获取权限开源项目
  4. eclipse里配置Android(安卓)ndk环境,用eclipse编译.so文件
  5. Android(安卓)GPS 定位的实现(2-1) 使用Google地图
  6. TabActivity实现多页显示效果
  7. Android(安卓)tips(十三)-->Android开发过程中使用Lambda表达式
  8. Android闪屏效果实现方法
  9. Android数据存储(二) Files

随机推荐

  1. 性能测试和自动化测试选哪个?
  2. 一场由SameSite字段引发的悲剧
  3. 还在为多张Excel汇总统计发愁?Python 秒处
  4. Spark Delta Lake 0.4.0 发布,支持 Python
  5. 一篇常做错的经典JS闭包面试题
  6. 2020年,那些已经死亡的公司
  7. Apache Spark 背后公司 Databricks 完成F
  8. 给你梳理了 44 个 CSS 精选知识点
  9. Vue自学之路4-vue模版语法(v-clock)
  10. DolphinDB模块复用教程