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

  1. <LinearLayout android:id="@+id/chart"
  2. android:orientation="horizontal"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:background="@color/white"
  6. android:layout_weight="1"
  7. />

2.写一个类,封装了画图函数:AchartViewUtil

  1. <pre name="code" class="java">package ujs.testchart.view;
  2.  
  3. import org.achartengine.chart.PointStyle;
  4. import org.achartengine.model.XYMultipleSeriesDataset;
  5. import org.achartengine.model.XYSeries;
  6. import org.achartengine.renderer.XYMultipleSeriesRenderer;
  7. import org.achartengine.renderer.XYSeriesRenderer;
  8.  
  9. import android.graphics.Color;
  10. import android.graphics.Paint.Align;
  11.  
  12. public class AchartViewUtil {
  13. /**
  14. * 获取数据
  15. *
  16. * @return 返回XYMultipleSeriesDataset
  17. * @yData 设置y轴的数据
  18. */
  19. public static XYMultipleSeriesDataset getBarDemoDataset(double[] xData,
  20. double[] yData) {
  21. XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
  22. XYSeries series = new XYSeries("Demo series " + 1);
  23. int length = 255;
  24. series.clear();
  25. if (yData == null) {
  26. yData = xData;
  27. }
  28. for (int k = 0; k < length; k++) {
  29. series.add(xData[k], yData[k]);
  30. }
  31. dataset.addSeries(series);
  32. return dataset;
  33. }
  34.  
  35. public static XYMultipleSeriesRenderer getBarDemoRenderer(double yStart,
  36. double yEnd) {
  37. XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
  38. XYSeriesRenderer r = new XYSeriesRenderer();
  39. r.setColor(Color.GREEN);
  40. renderer.addSeriesRenderer(r);
  41. r.setPointStyle(PointStyle.POINT);// 点的类型(圆形、方形或者没有)
  42. r.setFillPoints(false);// 设置点是否实心
  43. r.setLineWidth(3);
  44. setChartSettings(renderer, yStart, yEnd);
  45. return renderer;
  46. }
  47.  
  48. public static void setChartSettings(XYMultipleSeriesRenderer renderer,
  49. double yStart, double yEnd) {
  50. renderer.setMargins(new int[] { 50, 70, 50, 30 }); // 设置图表的外边框(上/左/下/右)
  51. renderer.setApplyBackgroundColor(true); // 设置是否显示背景色
  52. renderer.setBackgroundColor(Color.argb(00, 265, 265, 265));// 设置背景颜色
  53. renderer.setAxisTitleTextSize(16); // 设置轴标题文字的大小
  54. renderer.setChartTitleTextSize(10); // 设置整个图表标题文字大小
  55. renderer.setLabelsTextSize(22); // 设置刻度显示文字的大小(XY轴都会被设置)
  56. renderer.setLegendTextSize(15); // 图例文字大小
  57. renderer.setZoomButtonsVisible(false); // 是否显示放大缩小按钮
  58. renderer.setPointSize((float) 2); // 设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)
  59. renderer.setXAxisMin(320); // 设置X轴的最小值
  60. renderer.setXAxisMax(780); // 设置X轴的最大值
  61. renderer.setYAxisMin(yStart); // 设置Y轴的最小值
  62. renderer.setYAxisMax(yEnd); // 设置Y轴的最大值
  63. renderer.setAxesColor(Color.GREEN); // 设置X轴的颜色
  64. renderer.setLabelsColor(Color.GREEN); // 设置Y轴的颜色
  65. // renderer.setXLabels(6);
  66. // //设置x轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔
  67. // renderer.setYLabels(8);
  68. // //设置y轴显示6个点,根据setChartSettings的最大值和最小值自动计算点的间隔
  69. renderer.setShowGridY(false); // 是否显示Y网格
  70. renderer.setShowGridX(true); // 是否显示X方向的网格
  71. renderer.setGridColor(Color.GRAY); // 设置网格的颜色
  72. renderer.setXLabelsAlign(Align.CENTER); // 刻度线与刻度标注之间的相对位置关系
  73. renderer.setYLabelsAlign(Align.RIGHT); // 刻度线与刻度标注之间的相对位置关系
  74. renderer.setZoomButtonsVisible(false); // 是否显示放大缩小按钮
  75. renderer.setPanEnabled(false, true); // 设置是否允许XY轴方向移动
  76. renderer.setShowLegend(false); // 设置是否显示图例
  77. renderer.setMarginsColor(Color.WHITE); // 设置外框颜色穿透背景色
  78. renderer.setXTitle("波长(nm)"); // 设置xy轴的坐标
  79. renderer.setYTitle("A/D counts");
  80. }
  81. }
  1.  

然后有进一步封装了一下:这个就比较简单了:SimplifyUtil.java,这样对数据的支持更好一些

  1. package ujs.nir.jpminispec;
  2.  
  3. import org.achartengine.ChartFactory;
  4. import org.achartengine.GraphicalView;
  5. import org.achartengine.renderer.XYMultipleSeriesRenderer;
  6.  
  7. import ujs.testchart.view.AchartViewUtil;
  8. import android.app.ActionBar.LayoutParams;
  9. import android.content.Context;
  10. import android.widget.LinearLayout;
  11.  
  12. public class SimplifyUtil {
  13. // 依据AchartViewUtil封装的类进一步简化画图步骤
  14. public void showView(Context context, LinearLayout layout, double x[],
  15. double y[]) {
  16. // 图表工具
  17. XYMultipleSeriesRenderer renderer = AchartViewUtil.getBarDemoRenderer(
  18. 0, 50000);
  19. layout.removeAllViews(); // 这个方法是用来辅助实现刷新功能
  20. GraphicalView mChartView = ChartFactory.getCubeLineChartView(context,
  21. AchartViewUtil.getBarDemoDataset(x, y), renderer, 0.3f);// 设置曲线的平滑smooth
  22. // mChartView.postInvalidate();
  23. layout.addView(mChartView, new LayoutParams(LayoutParams.WRAP_CONTENT,
  24. LayoutParams.WRAP_CONTENT));
  25.  
  26. }
  27. }

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

  1. package com.example.achartview;
  2.  
  3. import org.achartengine.ChartFactory;
  4. import org.achartengine.GraphicalView;
  5. import org.achartengine.renderer.XYMultipleSeriesRenderer;
  6.  
  7. import android.app.ActionBar.LayoutParams;
  8. import android.os.Bundle;
  9. import android.support.v7.app.ActionBarActivity;
  10. import android.view.Menu;
  11. import android.view.MenuItem;
  12. import android.widget.LinearLayout;
  13.  
  14. public class MainActivity extends ActionBarActivity {
  15. double yData[] = new double[]{0,2,3,4,5,8,9,10};
  16. String[] date = new String[]{"0","1","2","3","4","5","6","7"};
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main);
  21. XYMultipleSeriesRenderer renderer = DrawableUtil.getBarDemoRenderer(date,0,10);
  22. LinearLayout layout = (LinearLayout) findViewById(R.id.chart); //绑定控件
  23. SimplifyUtil simplifyUtil = new SimplifyUtil();
  24. <span style="white-space:pre"> </span>simplifyUtil.showView(ScanSpec.this, layout, xv, resultData);//最后两个对应的是将要填充的xy的数据,可能会报错,因为android机制的原因:不能UI线程中,需要自己写个新的线程
  25. }
  26.  
  27. @Override
  28. public boolean onCreateOptionsMenu(Menu menu) {
  29. // Inflate the menu; this adds items to the action bar if it is present.
  30. getMenuInflater().inflate(R.menu.main, menu);
  31. return true;
  32. }
  33.  
  34. @Override
  35. public boolean onOptionsItemSelected(MenuItem item) {
  36. // Handle action bar item clicks here. The action bar will
  37. // automatically handle clicks on the Home/Up button, so long
  38. // as you specify a parent activity in AndroidManifest.xml.
  39. int id = item.getItemId();
  40. if (id == R.id.action_settings) {
  41. return true;
  42. }
  43. return super.onOptionsItemSelected(item);
  44. }
  45. }

注意AchartEngine是一个开源插件,点击访问

Android使用AchartEngine绘制曲线图的更多相关文章

  1. 【Android】achartengine的柱状图和饼状图的使用

    本文介绍了android中如何使用achartengine绘制饼图和柱状图,请分别尝试饼图和柱状图,曲线图. 先看效果图: 先看看获取数据: Workbook workbook = Workbook. ...

  2. AChartEngine绘制图形

    AChartEngine是Android作图的方法之一,要使用AChartEngine,首先下载AChartEngine,按照以下方法将其jar包添加到工程中: 1.将achartengine-1.1 ...

  3. Android实现图表绘制和展示

    本文演示在Android平台中绘制和展示图表示例,本示例是基于RChart 2实现的. 在一个系统中经常要用到图表统计数据,在WEB开发中图表绘制是一件简单的事情,因为有比较多的开源方案.但在Andr ...

  4. Android View 如何绘制

    上文说道了Android如何测量,但是一个漂亮的控件我只知道您长到哪儿,这当然不行.只需要简单重写OnDraw方法,并在Canvas(画布)对象上调用那根五颜六色的画笔就能够画出这控件"性感 ...

  5. Android View的绘制机制流程深入详解(四)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第四篇主要介绍Android自定义View及ViewGroup的实现方法和流程. 主要介绍了自绘控件.自定义组合控件.自定义继承控件 ...

  6. Android View的绘制机制流程深入详解(三)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第三篇主要介绍并分析视图状态以及重绘流程,首先剖析了 视图的几种状态,然后在深入分析视图的重绘机制流程. 真题园网:http://w ...

  7. Android View的绘制机制流程深入详解(二)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第二篇主要介绍并分析Android视图的绘制的原理和流程.主要从 onMeasure().onLayout()和onDraw()这三 ...

  8. Android View的绘制机制流程深入详解(一)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第一篇主要介绍并分析LayoutInflater的原理, 从而理解setContentView的加载原理.对于LayoutInfla ...

  9. 使用.net 的Chart控件绘制曲线图

    在进行软件开发过程中我们可能会碰到需要生成图表的情况,在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你 ...

随机推荐

  1. MySQL整体架构与内存结构

    一  mysql 整体框架: MySQL是由SQL接口,解析器,优化器,缓存,存储引擎等组成的. 1. Connectors指的是不同语言中与SQL的交互. 2. Management Serveic ...

  2. IoT:目录

    ylbtech-IoT:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech.c ...

  3. Python 模拟post请求

    # coding:utf-8import requestsurl = "https://passport.cnblogs.com/user/signin" # 接口地址 # 消息头 ...

  4. HashMap为什么是线程不安全的

    HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点.对链表而言,新加入的节点会从头结点加入. 我们来分析一下多线 ...

  5. JQ 获取ul\ol 下面li的个数

    使用 jQuery 获取 ul 下面 li 的个数,那么我们需要遍历我们的ul.如果你的ul有class .id 或两者都没,您可以使用 ul 标签来遍历. //遍历ul 获取li个数 $(" ...

  6. junit 直接执行测试方法报错

    在eclipse中,直接右击test1->Run As->Junit Test,报下面的错: java.lang.NoSuchMethodError: org.junit.runner.R ...

  7. 数据库路由中间件MyCat - 源代码篇(12)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. NodeList ruleNodes = e.getElementsByTagName("rule ...

  8. encodeURI和uncodeURIComponent的介绍

    encodeURI.decodeURI encodeURI.decodeURI 对字符转义:不替换特殊字符有18个.(大小写)字母.数字. 替换目标 将字符替换为 HTML URL编码 替换范围 A- ...

  9. 部署开发以太坊dapp的四种方式

    我们已经学习了4种开发和部署智能合约的方法: 第1种是使用 Truffle 和 Ganache .由于我们从上一篇教程中复制了代码,所以我想告诉你,有些插件可用于目前最流行的文本编辑器和 IDEs.有 ...

  10. 2014-8-5 NOIP(雾)模拟赛

    皇帝的烦恼(二分答案) Description 经过多年的杀戮,秦皇终于统一了中国.为了抵御外来的侵略,他准备在国土边境安置n名将军.不幸的是这n名将军羽翼渐丰,开始展露他们的狼子野心了.他们拒绝述职 ...