最近公司项目运用到了关于图表这一块的知识,用到了Android AchartEngine,这是为Android应用而设计的绘图工具库,能够支持多种图表类型。
这里有比较详细的关于AchartEngine的介绍与使用http://blog.csdn.net/lk_blog/article/details/7645509
这里主要谈的是自己对AchartEngine的一些理解与使用心得。
1、认识AchartEngine
如图所示,通过achartengine.ChartFactory调用数据集XYMultipleSeriesDataset对象与XYMultipleSeriesRenderer对象来设置好需要绘制的数据以及绘制的方法,然后调用绘制方法来绘制图表。AchartEngine提供了两种绘制图表的方法:
ChartFactory.getXXXChartIntent(Context context,XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset,):直接新建一个Activity全屏显示生成的图表。
ChartFactory.getXXXChartView(Context context,XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset,):生成一个GraphicalView,然后在需要的布局文件中Add进去即可。
ChartFactory有多种api,通过这些api调用来决定自己需要的图表。
1.XYMultipleSeriesRenderer对象:包含一系列XYSeriesRender,用来设置图表的整体风格,整体样式
2.XYMultipleSeriesDataset对象:包含一系列XYSeries,用于数据的存放,提供绘制的点集合的数据
3.XYSeriesRenderer对象:用来设置一条线条的风格,颜色啊,粗细之类的
4.XYSeries对象:用于存储一条线的数据信息
2、使用AchartEngine
首先将AchartEngine的第三讲jar包导入到自己的项目当中去,项目当中我用的是第二种方法来绘制图表。布局文件很简单,就是一个简单的线性布局,以后作为添加GraphicalView的布局。
<LinearLayout
android:id="@+id/sensors_data_chart_ll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="10dp"
android:orientation="horizontal" >
</LinearLayout>
然后就是在代码里面进行设置:
private void initviews() {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// 构造数据
Random random = new Random();
XYSeries series = new XYSeries("折线一");
for (int i = 1; i < 10; i++) {
series.add(i, random.nextInt(100));
}
// 需要绘制的点放在dataset当中
dataset.addSeries(series);
// 对点的绘制进行描述
XYSeriesRenderer xyRenderer = new XYSeriesRenderer();
// 设置颜色
xyRenderer.setColor(Color.BLUE);
// 设置点的风格
xyRenderer.setPointStyle(PointStyle.CIRCLE);
// 设置空心实心
xyRenderer.setFillPoints(true);
// 设置XY轴名称
renderer.setXTitle("时间");
renderer.setYTitle("温度");
// 设置标题
renderer.setChartTitle("折线图");
// 设置Y轴最大值
renderer.setYAxisMax(100);
renderer.setXAxisMax(10);
renderer.setXAxisMin(0);
renderer.setYAxisMin(0);
// 设置XY轴颜色
renderer.setAxesColor(Color.BLACK);
renderer.setLabelsColor(Color.BLACK);
// 设置XY轴显示
renderer.setYLabels(10);
renderer.setXLabels(10);
// 设置 是否显示图例
renderer.setShowLegend(true);
// 设置不显示放大缩小图标
renderer.setZoomEnabled(false);
// 设置是否支持图表缩放
renderer.setPanEnabled(false, false);
// 设置是否可点击
renderer.setClickEnabled(false);
// 是否显示网格
renderer.setShowGrid(true);
// 设置空白区的颜色
renderer.setMarginsColor(Color.WHITE);
renderer.setBackgroundColor(getResources().getColor(R.color.white));
// 设置坐标轴文字颜色
renderer.setXLabelsColor(Color.BLACK);
renderer.setYLabelsColor(0, Color.BLACK);
// 刻度线与刻度标注之间的相对位置关系
renderer.setXLabelsAlign(Align.CENTER);
// 刻度线与刻度标注之间的相对位置关系
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setZoomButtonsVisible(false);// 是否显示放大缩小按钮
renderer.setMargins(new int[] { 50, 50, 20, 20 });// 设置图表的外边框(上/左/下/右)
renderer.setAxisTitleTextSize(20);// 设置轴标题文字的大小
renderer.setChartTitleTextSize(30);// 设置整个图表标题文字的大小
renderer.setLabelsTextSize(15);// 设置轴刻度文字的大小
renderer.setLegendTextSize(15);// 设置图例文字大小
renderer.setPointSize(5);// 设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)
// 将要绘制的点添加到坐标绘制中
renderer.addSeriesRenderer(xyRenderer);
// 折线图
LinearLayout linearlayout = (LinearLayout) findViewById(R.id.sensors_data_chart_ll);
GraphicalView view = ChartFactory.getLineChartView(this, dataset,
renderer);
linearlayout.addView(view, LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
}
注解已经很详细,其实都是一些属性的设置,最后添加在对应的布局当中即可,效果图下:
项目中运用到的是AchartEngine制作的柱状图,属性设置都差不多,效果图如下: