使用AChartEngine的Android上的轻松图形

发布于:2021-02-01 11:12:20

0

83

0

android 图表 图形 开源 绘图 教程

在Android发行后不久的2008年末,开发人员已经在寻找图表/图形/绘图库。那时还没有这样的免费或开源解决方案。

为了好玩,我开始评估Android,在开发了几个需要一些绘图的Android应用程序之后,我决定可以用AChartEngine的名字来开源代码。版本0.2.0于2009年3月发布,这是Android的第一个开源图表库。当时,androidsdk的版本是1.1。

几乎四年过去了,所有类型的应用程序都在使用AChartEngine进行图表绘制。那个appbrain.com网站androidmarket表示,其发布应用程序总数的0.53%(超过60万个),这意味着其中超过3000个应用程序正在使用AChartEngine,其中包括Waze和Facebook的官方页面管理器应用程序。

使用AChartEngine向Android应用程序添加图表非常简单,只需将AChartEngine-x.y.z.jar添加到应用程序类路径,然后开始根据其api进行编码。目前稳定的版本是1.0.0,正在开发的版本是1.1.0。jar文件的大小只有110kb,这是一个相当小的占用空间。然而,尽管这个小尺寸的AChartEngine提供了对许多图表类型的支持。

兼容性说明:AChartEngine支持1.6和更高版本的所有Android SDK版本。1.6版仅提供基于平移和按钮的缩放,而2.1版和更高版本增加了对捏缩放的支持,因为该功能已在Android SDK 2.x和更高版本中提供。不久前,当AChartEngine放弃了对低于2.1的旧版Android SDK的支持时,许多用户在发布后几天就要求它。当时,根据此处提供的官方Android平台发行版,在全球范围内,仍有大约5%的设备运行的版本早于2.x。

产品特点

AChartEngine支持三种主要的图表类型:

  • XY图表–在2轴上显示数据(线,立方线,面积,条形图,散点图,气泡,范围(高-低))

  • “圆形”图表–馅饼,甜甜圈,刻度盘

  • 组合图表–可以显示XY图表的组合

要快速浏览一些AChartEngine演示应用程序屏幕截图,请访问官方网站和AChartEngine Google代码页。

整体课堂设计

  • AbstractChart类描述了所有图表共享的行为,包括图形背景,图例,标题等

  • XYChart类描述XY图表类型共有的状态和行为,例如轴,标签等的呈现

  • RoundChart与XYChart类似,但是对于具有圆形形状的图表类型。

设计组成

整个设计不仅限于视觉/视图部分。还有更多组成部分有助于整体情况。

  • 模型–数据集/一系列数据。

  • 视图–如上所述。

  • 渲染器–帮助自定义图表外观(颜色,字体,轴,标签,格式等)。

  • ChartFactory –获取数据集的实例和渲染器的实例,并返回嵌入到Intent(对于图表填充Activity的情况)或View(当图表是Activity的一部分时)的所需图表,以及其他小部件)。

  • 工具–用于平移和缩放的交互工具。

代码示例

为了针对AChartEngine API进行编码,您可以下载以下二进制文件之一,将其包含在类路径中并开始编码:

  • 稳定的版本,目前可以在这里下载1.0.0 

  • 中间版本,候选发布版本可在此处下载

  • 每晚版本可以在 这里下载

通过将以下内容添加到他们的pom.xml文件中,Maven用户可以在其应用程序中包括AChartEngine:

<repository>
   <id>achartengine</id>
   <name>Public AChartEngine repository</name>
   <url>https://repository-achartengine.forge.cloudbees.com/snapshot/</url>
</repository>

<dependency>
   <groupId>org.achartengine</groupId>
   <artifactId>achartengine</artifactId>
   <version>1.1.0</version>
</dependency>

下面引用的代码显示了在应用程序中使用AChartEngine的示例。该程序允许创建新的数据系列,并输入X和Y值,然后将其添加到当前系列中。每次添加数据后都会更新图表。下面的屏幕快照中显示了使用该应用程序创建一系列10个数据点的示例。完整的源代码 在这里。它包括用于解释最重要部分的注释。

mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);

mChartView = ChartFactory.getBarChartView(this, mDataset, mRenderer, Type.DEFAULT);

mChartView = ChartFactory.getScatterChartView(this, mDataset, mRenderer);

为了使上面的示例工作,必须定义一个简单的布局文件,并且该文件必须包含带有android:id =” @ + id / chart”的LinearLayout。此示例的布局文件 在此处可用。仅需少量更改,我们就可以重用上面的代码来构建用于创建饼图的用户界面。我们只需要一个单一的输入文本字段即可一次输入一个单一值,而不是我们在XY图表中输入的X和Y值。然后,我们将需要实例化另一种类型的渲染器,如下面的代码所示。我们还需要定义一些颜色值以用于我们创建的切片。

/** Colors to be used for the pie slices. */
private static int[] COLORS = new int[] { Color.GREEN, Color.BLUE, Color.MAGENTA, Color.CYAN };
/** The main series that will include all the data. */
private CategorySeries mSeries = new CategorySeries("");
/** The main renderer for the main dataset. */
private DefaultRenderer mRenderer = new DefaultRenderer();

// set the start angle for the first slice in the pie chart
mRenderer.setStartAngle(180);
// display values on the pie slices
mRenderer.setDisplayValues(true);

mSeries.add("Series " + (mSeries.getItemCount() + 1), value);
SimpleSeriesRenderer renderer = new SimpleSeriesRenderer();
renderer.setColor(COLORS[(mSeries.getItemCount() - 1) % COLORS.length]);
mRenderer.addSeriesRenderer(renderer);
mChartView.repaint();

mChartView = ChartFactory.getPieChartView(this, mSeries, mRenderer);

for (int i = 0; i < mSeries.getItemCount(); i++) {
     mRenderer.getSeriesRendererAt(i).setHighlighted(i == seriesSelection.getPointIndex());
   }
mChartView.repaint();

生成的图表应如下所示:

这个代码示例包含在官方的演示应用程序中,可以在这里下载。您可以找到所有AChartEngine支持的图表类型的示例。