65.9K
CodeProject 正在变化。 阅读更多。
Home

使用AChartEngine库在Android中创建图表

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.52/5 (9投票s)

2014年7月16日

CPOL

3分钟阅读

viewsIcon

34763

downloadIcon

892

本文介绍如何在 Android 应用程序中创建图表。

引言

在本文中,我将展示如何使用 AChartEngine 图表库为 Android 平台创建图表。AChartEngine 库是一个开源的 Android 图表库,支持从 1.6 开始的所有 Android 版本。本文中的项目基于 AChartEngine 库的 1.1.0 版本。

背景

为了演示本文,我创建了一个绘制正弦、余弦和正切图表的项目。 我是在运行在 VMWare 上的 Android X86 模拟器上安装的 AIDE 中创建的项目。 AIDE 是 Android 设备的 Android IDE。 AIDE 完全运行在任何基于 Android 的手机或平板电脑上,并且可以安装在运行在虚拟机上的 Android 模拟器上。 相同的方法可用于使用传统的基于 eclipse 的方法开发项目。

为了开始使用 AChartEngine,必须将主库 (achartengine-1.1.0.jar) 复制到 Android 项目的 lib 文件夹中。 AChartEngine 支持三种类型的图表

  • XY 图表 - 这些图表使用 X 轴和 Y 轴显示数据,例如折线图、面积图、条形图、散点图。
  • 圆形图表 - 这些是圆形图表,例如饼图、甜甜圈图、刻度盘图。
  • 组合图表 - 这些图表显示几个 XY 图表的组合。

Using the Code

主布局文件具有线性布局,id 为 "@+id/chart"。

以下是布局 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/chart"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="vertical" >
</LinearLayout>

我们需要按照以下方式覆盖 MainActivity 类中 Activity 类的 onResume() 方法

@Override
protected void onResume()
{
    super.onResume();

    // Get a reference of the layout
    LinearLayout layout=(LinearLayout)findViewById(R.id.chart);
    if(myChart==null)
    {
        // Initialize the chart
        initializeChart();

        // Add data to the chart
        addData();

        // Create a line chart
        myChart=ChartFactory.getLineChartView(this, mySeries, myRenderer);

        // Add chart to the layout
        layout.addView(myChart);
    }
    else
    {
        // Refresh the chart
        myChart.repaint();
    }
}

上面的代码引用了图表布局并调用用户定义的函数 initializeChart() 来初始化图表参数,并调用另一个用户定义的函数 addData() 将数据添加到图表中。然后,它根据指定的数据创建一个折线图,并将该图表添加到布局中。如果已创建图表,则只需通过调用 repaint() 方法来刷新图表。

以下是 initializeChart() 方法的代码

>private void initializeChart()
{
    // Initialize renderers
    sineRenderer=new XYSeriesRenderer();
    cosineRenderer=new XYSeriesRenderer();
    tangentRenderer=new XYSeriesRenderer();

    // Set color for each series
    sineRenderer.setColor(Color.RED);
    cosineRenderer.setColor(Color.GREEN);
    tangentRenderer.setColor(Color.BLUE);

    // Create XYMultipleSeriesRenderer
    myRenderer=new XYMultipleSeriesRenderer();

    // Add renderers to XYMultipleSeriesRenderer
    myRenderer.addSeriesRenderer(sineRenderer);
    myRenderer.addSeriesRenderer(cosineRenderer);
    myRenderer.addSeriesRenderer(tangentRenderer);

    // Disable panning
    myRenderer.setPanEnabled(false);

    // Set Y-Axis range
    myRenderer.setYAxisMax(1);
    myRenderer.setYAxisMin(-1);

    // Initialize series
    sineSeries=new XYSeries("Sine");
    cosineSeries=new XYSeries("Cosine");
    tangentSeries=new XYSeries("Tangent");

    // Create XYMultipleSeriesDataset
    mySeries=new XYMultipleSeriesDataset();

    // Add series to XYMultipleSeriesDataset
    mySeries.addSeries(sineSeries);
    mySeries.addSeries(cosineSeries);
    mySeries.addSeries(tangentSeries);
}

上面的代码创建了三个 XYSeriesRenderer 对象,sineRenderercosineRenderertangentRenderer,并分别用红色、绿色和蓝色初始化它们。然后,它将这三个渲染器添加到一个名为 myRendererXYMultipleSeries 渲染器对象。 通过调用 setPanEnabled(false) 方法禁用平移。 通过使用 setYAxisMin()setYAxisMax() 方法将 Y 轴的范围设置为从 -11。 创建了三个 XYSeries 对象,sineSeriescosineSeriestangentSeries,并将它们添加到一个名为 mySeriesXYMultipleSeriesDataset 对象。

以下是 addData() 方法的代码

private void addData()
{
    // Add data to the chart series
    for(int angle=5;angle<=1440;angle+=5)
    {
        sineSeries.add(angle, Math.sin(angle*(Math.PI/180)));
        cosineSeries.add(angle, Math.cos(angle*(Math.PI/180)));
        tangentSeries.add(angle, Math.tan(angle*(Math.PI/180)));
    }
}

上面的代码将正弦、余弦和正切数据添加到相应的 XYSeries 对象,角度范围从 5 到 1440。三角函数的参数使用公式“angle * (? / 180)”从度数转换为弧度。

运行该程序会创建一个折线图,如下所示

通过这种方式将 getLineChartView() 方法更改为 getBarChartView()myChart=ChartFactory.getBarChartView(this, mySeries, myRenderer, BarChart.Type.Default),生成一个条形图,如下所示

关注点

AChartEngine 是一个非常有用的图表库,业余爱好者和熟练的专业人士都可以轻松使用它来为 Android 平台创建优雅的图表。

© . All rights reserved.