您的位置:首页 > 移动开发 > Android开发

Android之achartengine简单示例

2012-06-25 16:38 281 查看
achartengine是一个android平台下较好的图形报表开发库。该项目的地址:http://code.google.com/p/achartengine/ 。现在最新版本1.0。每个版本都有对应的jar包、demo和java doc。demo里面的例子已经非常详尽了,你可以先把demo下载下来导入到eclipse里。这儿我做一个示例,并加上注释。

demo里有一个AbstractDemoChart.java的类,这个类可以作为一个父类,你画任何图时可以继承自这个类。画图主要有两个方面,一个是dataset即数据集,比如x/y轴的数值等;一个是renderer即渲染器,比如字体颜色、大小等等一些样式。这个父类里就是一些建立dataset和renderer的基本方法,当然你可以根据自己需要修改。最后通过ChartFactory类的相应方法生成对应的图表,比如getLineChartIntent(..)生成线性表,这个返回的是一个Intent,可以直接启动它,不过要注意在manifest文件中要加上<activity
android:name="org.achartengine.GraphicalActivity" /> 。还可以通过ChartFactory的getLineChartView(..)返回一个线性表的view对象,这样你可以把这个view对象放在一个布局中展示。下面是示例的主要代码:

public class AverageTemperatureChart extends AbstractDemoChart {

public String getName() {
return "Average temperature";
}

public String getDesc() {
return "The average temperature in 4 Greek islands (line chart)";
}

/**
* Executes the chart demo.
*
* @param context
*            the context
* @return the built intent
*/
public Intent execute(Context context) {
// 每个item的title
String[] titles = new String[] { "Crete", "Corfu", "Thassos",
"Skiathos" };
// x轴的值
List<double[]> x = new ArrayList<double[]>();
for (int i = 0; i < titles.length; i++) {
x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
}
// y轴的值
List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4,
26.1, 23.6, 20.3, 17.2, 13.9 });
values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26, 23, 18, 14,
11 });
values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24, 19, 15, 9, 6 });
values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 });
int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN,
Color.YELLOW };
// 点的样式
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,
PointStyle.DIAMOND, PointStyle.TRIANGLE, PointStyle.SQUARE };
XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
int length = renderer.getSeriesRendererCount();
// 点是空心还是实心
for (int i = 0; i < length; i++) {
((XYSeriesRenderer) renderer.getSeriesRendererAt(i))
.setFillPoints(true);
}

// 图表部分的背景颜色
renderer.setBackgroundColor(Color.parseColor("#f3f3f3"));
renderer.setApplyBackgroundColor(true);
// 图表与屏幕四边的间距颜色
renderer.setMarginsColor(Color.argb(0, 0xF3, 0xF3, 0xF3));
renderer.setChartTitleTextSize(30);
renderer.setAxisTitleTextSize(25);
// renderer.setLegendHeight(50);
// 图例文字的大小
renderer.setLegendTextSize(20);
renderer.setMargins(new int[] { 50, 50, 50, 30 });
// x、y轴上刻度颜色
renderer.setXLabelsColor(Color.BLACK);
renderer.setYLabelsColor(0, Color.BLACK);

// 最后两个参数代表轴的颜色和轴标签的颜色
setChartSettings(renderer, "Average temperature", "Month",
"Temperature", 0.5, 12.5, -10, 40, Color.BLACK, Color.BLACK);
// 轴上数字的数量
renderer.setXLabels(12);
renderer.setYLabels(10);
// 是否显示网格
renderer.setShowGrid(true);
// x或y轴上数字的方向,相反的。
renderer.setXLabelsAlign(Align.RIGHT);
renderer.setYLabelsAlign(Align.RIGHT);
// 有问题的方法
// renderer.setZoomButtonsVisible(true);
// renderer.setPanLimits(new double[] { -10, 20, -10, 40 });
// renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });

Intent intent = ChartFactory.getLineChartIntent(context,
buildDataset(titles, x, values), renderer,
"Average temperature");
return intent;
}
}
代码中的
renderer.setZoomButtonsVisible(true);
这个方法是有问题的,加上就会报错,这个方法是显示缩放按钮的。一些方法可以自己修改修改看看效果,其他图表可以参看官方的demo。

附上效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: