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.写一个类,封装了画图函数:AchartViewUtil

<pre name="code" class="java">package ujs.testchart.view;

import org.achartengine.chart.PointStyle;
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 AchartViewUtil {
/**
* 获取数据
*
* @return 返回XYMultipleSeriesDataset
* @yData 设置y轴的数据
*/
public static XYMultipleSeriesDataset getBarDemoDataset(double[] xData,
double[] yData) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
XYSeries series = new XYSeries("Demo series " + 1);
int length = 255;
series.clear();
if (yData == null) {
yData = xData;
}
for (int k = 0; k < length; k++) {
series.add(xData[k], yData[k]);
}
dataset.addSeries(series);
return dataset;
} public static XYMultipleSeriesRenderer getBarDemoRenderer(double yStart,
double yEnd) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(Color.GREEN);
renderer.addSeriesRenderer(r);
r.setPointStyle(PointStyle.POINT);// 点的类型(圆形、方形或者没有)
r.setFillPoints(false);// 设置点是否实心
r.setLineWidth(3);
setChartSettings(renderer, yStart, yEnd);
return renderer;
} public static void setChartSettings(XYMultipleSeriesRenderer renderer,
double yStart, double yEnd) {
renderer.setMargins(new int[] { 50, 70, 50, 30 }); // 设置图表的外边框(上/左/下/右)
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((float) 2); // 设置点的大小(图上显示的点的大小和图例中点的大小都会被设置)
renderer.setXAxisMin(320); // 设置X轴的最小值
renderer.setXAxisMax(780); // 设置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.setXTitle("波长(nm)"); // 设置xy轴的坐标
renderer.setYTitle("A/D counts");
}
}

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

package ujs.nir.jpminispec;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.renderer.XYMultipleSeriesRenderer; import ujs.testchart.view.AchartViewUtil;
import android.app.ActionBar.LayoutParams;
import android.content.Context;
import android.widget.LinearLayout; public class SimplifyUtil {
// 依据AchartViewUtil封装的类进一步简化画图步骤
public void showView(Context context, LinearLayout layout, double x[],
double y[]) {
// 图表工具
XYMultipleSeriesRenderer renderer = AchartViewUtil.getBarDemoRenderer(
0, 50000);
layout.removeAllViews(); // 这个方法是用来辅助实现刷新功能
GraphicalView mChartView = ChartFactory.getCubeLineChartView(context,
AchartViewUtil.getBarDemoDataset(x, y), renderer, 0.3f);// 设置曲线的平滑smooth
// mChartView.postInvalidate();
layout.addView(mChartView, new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT)); }
}

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

package com.example.achartview;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.renderer.XYMultipleSeriesRenderer; import android.app.ActionBar.LayoutParams;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout; public class MainActivity extends ActionBarActivity {
double yData[] = new double[]{0,2,3,4,5,8,9,10};
String[] date = new String[]{"0","1","2","3","4","5","6","7"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
XYMultipleSeriesRenderer renderer = DrawableUtil.getBarDemoRenderer(date,0,10);
LinearLayout layout = (LinearLayout) findViewById(R.id.chart); //绑定控件
SimplifyUtil simplifyUtil = new SimplifyUtil();
<span style="white-space:pre"> </span>simplifyUtil.showView(ScanSpec.this, layout, xv, resultData);//最后两个对应的是将要填充的x、y的数据,可能会报错,因为android机制的原因:不能UI线程中,需要自己写个新的线程
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

注意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. P2766 [网络流24题]最长不下降子序列问题

    ha~ «问题描述: 给定正整数序列$x_1,...,x_n$ .$n<=500$ 求(1)计算其最长不下降子序列的长度$s$. (2)计算从给定的序列中最多可取出多少个长度为$s$的不下降子序 ...

  2. TI官网常用链接

    TMS320C6000系列DSP库dsplib下载 TMS320C6000系列DSP库imglib下载 TMS320C6000系列DSP库mathlib下载 TMS320C66657技术文档

  3. session.write类型引发的思考---Mina Session.write流程探索.doc--zhengli

    基于Mina开发网络通信程序,在传感器数据接入领域应用的很广泛,今天我无意中发现一个问题,那就是我在前端session.write(msg)数据出去之后,却没有经过Filter的Encoder方法,同 ...

  4. lwip【5】 lwIP配置文件opt.h和lwipopts.h初步分析之二

    如何去配置lwip,使它去适合不同大小的脚,这就是本贴的主题lwIP的配置问题.尤其是内存的配置,配置多了浪费,配置少了跑不了或者不稳定(会出现的一大堆莫名奇妙的问题,什么打开网页的速度很慢啊?什么丢 ...

  5. Oracle数据库获取一行记录中某几个字段的最大值/最小值函数

    在数据库的开发过程中,我们可能会遇到这样的需求,获取一行记录中某几个字段的最大值或者是最小值,oracle给我们提供了解决这种需求的函数,如下所示:   greatest(col1, col2, co ...

  6. 利用d3js绘出环形百分比环

    利用d3js绘出环形百分比环 (function() { var numberData = [{ value : 0.334, text : "33.4%", color : &q ...

  7. 2-3 Flutter开发环境与iOS开发环境设置(Mac)

    Mac下环境搭建 先不看了 都是Mac下的环境搭建

  8. Thinkphp3.2 下载文件的方法

    今天做一个功能,刚好遇到了一个要下载文件功能的需求,所以把这个基于thinkphp3.2的文件下载功能,描述一下大概的实现方法. 网上有人说用a链接的方法实现,但是这种方法并不安全.所以我们还是用官方 ...

  9. HDU - 5950 Recursive sequence(二项式+矩阵合并+矩阵快速幂)

    Recursive sequence Farmer John likes to play mathematics games with his N cows. Recently, they are a ...

  10. [poj百练]2754:八皇后 回溯

    描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8皇后 ...