AchartEngine制作图表

最近公司项目运用到了关于图表这一块的知识,用到了Android AchartEngine,这是为Android应用而设计的绘图工具库,能够支持多种图表类型。

这里有比较详细的关于AchartEngine的介绍与使用http://blog.csdn.net/lk_blog/article/details/7645509

这里主要谈的是自己对AchartEngine的一些理解与使用心得。

1、认识AchartEngine

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制作图表

项目中运用到的是AchartEngine制作的柱状图,属性设置都差不多,效果图如下:
AchartEngine制作图表

上一篇:SwipeRefreshLayout的下拉刷新与上拉加载


下一篇:封装一个日期时间选择器