Android开发 绘制曲线图 AchartEngine使用

来源:互联网 发布:什么是linux发行版 编辑:程序博客网 时间:2024/05/15 23:47

1.首先在布局文件中加入LinearLayout布局,如下:

    <LinearLayout android:id="@+id/chart"  android:orientation="horizontal" android:layout_width="fill_parent"  android:layout_height="fill_parent" android:background="@color/white" android:layout_weight="1" />

2.写一个类,封装了绘图工具

package com.jinbi.app.utils;import java.util.Random;import org.achartengine.chart.PointStyle;import org.achartengine.model.CategorySeries;import org.achartengine.model.XYMultipleSeriesDataset;import org.achartengine.model.XYSeries;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;import android.graphics.Color;import android.graphics.Paint.Align;public class DrawableUtil {  /**获取数据   * @return 返回XYMultipleSeriesDataset * @yData  设置y轴的数据 */public static XYMultipleSeriesDataset getBarDemoDataset(double[] yData){        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();        final int nr = yData.length;        CategorySeries series = new CategorySeries("Demo series " + 1);                for (int k = 0; k < nr; k++){        series.add(yData[k]);        }        dataset.addSeries(series.toXYSeries());        return dataset;}     public static XYMultipleSeriesRenderer getBarDemoRenderer(String[] date,double yStart,double yEnd) {        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();        XYSeriesRenderer r = new XYSeriesRenderer();        r.setColor(Color. BLUE );        renderer.addSeriesRenderer(r);        r.setPointStyle(PointStyle.CIRCLE);//点的类型是圆形          r.setFillPoints(true);//设置点是否实心          setChartSettings(renderer, date, yStart, yEnd);        return renderer;     }     public static void setChartSettings(XYMultipleSeriesRenderer renderer,String[] dates,double yStart,double yEnd) {    int i = 1;    renderer.setMargins(new int[] { 50, 50, 50, 0 });          //设置图表的外边框(上/左/下/右)      renderer.setApplyBackgroundColor(true);                    //设置是否显示背景色    renderer.setBackgroundColor(Color.argb(00, 265, 265, 265));//设置背景颜色    renderer.setAxisTitleTextSize(16);                         //设置轴标题文字的大小    renderer.setChartTitleTextSize(10);                        //设置整个图表标题文字大小      renderer.setLabelsTextSize(22);                            //设置刻度显示文字的大小(XY轴都会被设置)      renderer.setLegendTextSize(15);                            //图例文字大小      renderer.setZoomButtonsVisible(false);                     //是否显示放大缩小按钮     renderer.setPointSize(5);                                  //设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)         renderer.setXAxisMin(0);                                   //设置X轴的最小值        renderer.setXAxisMax(8);                                   //设置X轴的最大值        renderer.setYAxisMin(yStart);                              //设置Y轴的最小值        renderer.setYAxisMax(yEnd);                                //设置Y轴的最大值        renderer.setAxesColor(Color.GREEN);                        //设置X轴的颜色        renderer.setLabelsColor(Color.GREEN);                      //设置Y轴的颜色        renderer.setXLabels(6);                                    //设置x轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔          renderer.setYLabels(8);                                    //设置y轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔          renderer.setShowGridY(false);                              //是否显示Y网格          renderer.setShowGridX(true);                               //是否显示X方向的网格        renderer.setGridColor(Color.GRAY);                         //设置网格的颜色        renderer.setXLabelsAlign(Align.CENTER);                     //刻度线与刻度标注之间的相对位置关系        renderer.setYLabelsAlign(Align.RIGHT);                     //刻度线与刻度标注之间的相对位置关系          renderer.setZoomButtonsVisible(false);                     //是否显示放大缩小按钮          renderer.setPanEnabled(false, true);                      //设置是否允许XY轴方向移动        renderer.setShowLegend(false);                             //设置是否显示图例        renderer.setMarginsColor(Color.WHITE);                     // 设置外框颜色穿透背景色        renderer.setXLabelsAngle(-25);                             // 设置X轴标签倾斜角度(clockwise degree)        renderer.setXLabels(0);                                    // 设置X轴不显示数字(改用我们手动添加的文字标签)        for (String date:dates){        renderer.addTextLabel(i, date);                        //修改X轴显示坐标        i++;        }     }}

3.在Activity中加入代码,显示出控件

XYMultipleSeriesRenderer renderer = DrawableUtil.getBarDemoRenderer(date,yStart,yEnd);layout = (LinearLayout) findViewById(R.id.chart);       //绑定控件  layout.removeAllViews();                                //这个方法是用来辅助实现刷新功能mChartView = ChartFactory.getTimeChartView(this, DrawableUtil.getBarDemoDataset(yData), renderer, "MM/dd");          layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); 

这样就可以在LinearLayout控件中将图标显示出来了。当然还有些细节需要自己处理!

4.补充:

       1、增加需求:显示的点上加文字

               renderer.setDisplayChartValues(true);                //显示点的坐标值

               XYSeriesRenderer.setChartValuesTextSize(25);    //设置点的文字大小

        

原创粉丝点击