第一步:
我使用的事AchartEngine 1.1.0 的包。大家要先下在这个包,放到项目中,创建一个lib文件夹。然后倒金项目中去。
然后再AndroidManifest.xml 中需要注册一下
代码是:

第二步:创建一个xml文件 我这里使用的事 rain_2_2.xml
<?xml version="1.0" encoding="utf-8"?>

 1
2
3
4
5
6
7
8
9
10
11
12
<Button
android:id="@+id/linepoint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/linepoint" /> <LinearLayout
android:id="@+id/layouto2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
</LinearLayout>

第三步:主程序代码

import java.util.Date;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;

import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Paint.Align;

/**
* 折线图
*
/
public class RainViewImp2 {

//将视图封装起来,返回视图
public GraphicalView getChartGraphicalView(Context context,List xvalue, List yvalue){
return ChartFactory.getTimeChartView(context, getDataSet(xvalue,yvalue), getRenderer(), "M/d HH:mm");
}
/*
* 构造数据
* @return
*/
//注: 也可以在这个方法里面直接传入数据,这里我是从外界传入的数据,如果要在各个方法里直接插入数据的话,我的这个被注解掉的就是,
一定要注意把这个点放进barDataset中,也就是 barDataset.addSeries(timeseries);这句代码
public XYMultipleSeriesDataset getDataSet( List xvalue,List yvalue) {
// 构造数据
XYMultipleSeriesDataset barDataset = new XYMultipleSeriesDataset();

TimeSeries timeseries=new TimeSeries("雨量");

// List xvalue=new ArrayList();

// List yvalue=new ArrayList();

// xvalue.add(new Date(355555));
// xvalue.add(new Date(359899));
// xvalue.add(new Date(855555));
//

// yvalue.add(1.0);
// yvalue.add(9.0);
// yvalue.add(22.0);

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
             for(int i=0;i<xvalue.size();i++){
timeseries.add(xvalue.get(i),yvalue.get(i));
}
//将需要绘制的点放进barDataset中
barDataset.addSeries(timeseries);
return barDataset;
} /**
* 构造渲染器
* @return
*/ public XYMultipleSeriesRenderer getRenderer() {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
// SimpleSeriesRenderer simp=new SimpleSeriesRenderer();
// 3, 对点的绘制进行设置
XYSeriesRenderer xyRenderer = new XYSeriesRenderer();
// 3.1设置颜色
xyRenderer.setColor(Color.GREEN);
// 3.2设置点的样式
xyRenderer.setPointStyle(PointStyle.TRIANGLE);
// 3.3, 将要绘制的点添加到坐标绘制中
renderer.addSeriesRenderer(xyRenderer);
xyRenderer.setDisplayChartValues(true);
renderer.setChartTitle("雨量实时分布");//设置图的标题
renderer.setXTitle("时间");//设置X轴标题
renderer.setYTitle("单位(毫米)");//设置y轴标题
renderer.setAxesColor(Color.WHITE);//x轴线的颜色
renderer.setLabelsColor(Color.WHITE);//y轴线的颜色
renderer.setXLabels(10);//x轴显示的个数
renderer.setYLabels(10);//y轴显示的个数
// 是否显示网格
// renderer.setShowGrid(false);
// x或y轴上数字的方向,相反的。
renderer.setXLabelsAlign(Align.RIGHT);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setPointSize((float) 3);//设置每个轴上点的大小
// 图表部分的背景颜色
renderer.setBackgroundColor(Color.TRANSPARENT);
renderer.setApplyBackgroundColor(true);
renderer.setPanEnabled(true,false);//设置xy轴能否拖动
// 设置每个柱子上是否显示数值
// renderer.getSeriesRendererAt(0).setDisplayChartValues(true);
//renderer.getSeriesRendererAt(0).setChartValuesTextSize(30);
//simp.setChartValuesTextSize(40);
// simp.setDisplayChartValues(true);
// 设置渲染器显示缩放按钮
renderer.setZoomButtonsVisible(true);
// 设置渲染器允许放大缩小
renderer.setZoomEnabled(true);
/* renderer.setXLabels(0);//设置X轴不显示数字
String X[]={"10:00","10:01","10:02","10:03","10:04","10:05","10:06","10:07","10:08","10:09","10:10"};
for(int i=0; i<X.length;i++){
renderer.addXTextLabel(i, X);
}
*/
renderer.setClickEnabled(true);//设置是否可以点击
renderer.setSelectableBuffer(20);//设置点击但范围
return renderer;
}

}

然后接下里就要在MainActivity中去调用了

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.achartengine.GraphicalView;
import org.achartengine.model.SeriesSelection;
import com.ezonejs.viewImp.RainViewImp2;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class ChartLineMainActivity extends Activity implements OnClickListener{
LinearLayout layout2;
RelativeLayout relalayout00;
Button zhandian2;
GraphicalView graphview2;
RainViewImp2 rain2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rain_2_2);
layout2=(LinearLayout)findViewById(R.id.layouto2);
zhandian2=(Button)findViewById(R.id.linepoint);

//这里注意如果是从外界传入数据,那么就在这里可以传入,也可以将其封装起来,在这里调用,如果是在上面的构造数据是传入数据,这里就不需要了,
我这里是为了动态改变数据而坐的一个简单的例子,下面的这来那个xvalue,yvalue,可以从数据库中得到值,如果你有需要自己传入,这里是初始化 的的数据
一打开图形界面就就能看到这个数据
List xvalue=new ArrayList();

List yvalue=new ArrayList();
xvalue.add(new Date(455555));
xvalue.add(new Date(559899));
xvalue.add(new Date(855555));
yvalue.add(10.0);
yvalue.add(20.0);
yvalue.add(52.0);

rain2=new RainViewImp2();
graphview2=rain2.getChartGraphicalView(getApplicationContext(),xvalue,yvalue);
layout2.addView(graphview2);

graphview2.setOnClickListener(this);

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
           zhandian2.setOnClickListener(new OnClickListener() {

                    @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.linepoint: //Toast.makeText(getApplicationContext(), "hdsfgdf", Toast.LENGTH_LONG).show();
List<Date> xvalue=new ArrayList<Date>();
List<Double> yvalue=new ArrayList<Double>();
xvalue.add(new Date(355555));
xvalue.add(new Date(359899));
yvalue.add(9.0);
yvalue.add(22.0);
GraphicalView graphview1=rain2.getChartGraphicalView(getApplicationContext(),xvalue,yvalue);
layout2.removeView(graphview2);//这里需要注意,很多人只做是没有用这个方法,导致图不能重新绘制,
layout2.addView(graphview1);
break;
}
}
});
}
/**
* 监听Toast,提示数据的显示格式的等
*/
@SuppressLint("SimpleDateFormat")
@Override
public void onClick(View v) {
GraphicalView graphicalView=(GraphicalView)v;
SeriesSelection seriesselection=graphicalView.getCurrentSeriesAndPoint();
if(seriesselection==null){
return ;
}
SimpleDateFormat sp=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String time=sp.format(new Date(559899));
//获取x轴的值
int x=(int)seriesselection.getXValue();
//获取y轴的值
int y=(int)seriesselection.getValue();
Toast toast=new Toast(this);
toast=Toast.makeText(getApplicationContext(),"时间:"+time+"n"+" 值:"+y, Toast.LENGTH_LONG);
//设置toast显示的位置
toast.setGravity(Gravity.getAbsoluteGravity(x, y), 500, 100);
Toast.makeText(getApplicationContext(), Gravity.getAbsoluteGravity(x, y)+"", Toast.LENGTH_LONG).show();
LinearLayout toastView=(LinearLayout)toast.getView();
//设置Toast的背景色
toastView.setBackgroundColor(Color.BLUE);
toast.show();//显示Toast
}

}
//这里只做了一个监听,就是监听图上数据,当点击图上局数据是会显示详细信息,如果你需要再第二绘图时还有此功能,只要把监听从新设置一下,然后调用就 可以了。
我这里没有实现 第二次点击还有效果,需要时自己设置
第四步:在数函数中调用

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener{

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
         private Button rainbar2;//折线图

            @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rainbar2 = (Button) findViewById(R.id.rain2);//折线图
rainbar2.setOnClickListener(this);
}
/**
* 监听
*/
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.rain2: /*RainViewImp2 rainview2=new RainViewImp2();
Intent linetent2=rainview2.getIntent(this);
startActivity(linetent2);*/
Intent linetent2 = new Intent(MainActivity.this,ChartLineMainActivity.class);
startActivity(linetent2);
break;
}
}

}
这里用到了Intent对象需要在AndroidManifest.xml中注册一下
这是我使用的包,尼克一根据你自己的项目包注册一下,
否则程序一运行就停止,原因就是没有在AndroidManifest.xml中注册。
好了,这样一个简单的折线图就完成了
如果需要做状图的话,很简单只要该getTimeChartView,这个方法就可以了,有时候可能会出错,原因是渲染器造成的,柱状图的渲染器属性设置
和折线图的属性不一样,需要注意看一下。
如果需要的话可以查看官方的API文档,这里为大家提供一个网址
http://www.achartengine.org/content/javadoc/org/achartengine/ChartFactory.html#getCubeLineChartViewandroid.content.Context(, org.achartengine.model.XYMultipleSeriesDataset, org.achartengine.renderer.XYMultipleSeriesRenderer, float)

AchartEngine 的学习的更多相关文章

  1. Android开发学习之路--图表实现(achartengine/MPAndroidChart)之初体验

      已经有一段时间没有更新博客了,在上周离开工作了4年的公司,从此不再安安稳稳地工作了,更多的是接受挑战和实现自身价值的提高.离开了嵌入式linux,从此拥抱移动互联网,也许有点为时已晚,但是相信通过 ...

  2. Android中图表AChartEngine学习使用与例子

    很多时候项目中我们需要对一些统计数据进行绘制表格,更多直观查看报表分析结果.基本有以下几种方法: 1:可以进行android  api进行draw这样的话,效率比较低 2:使用开源绘表引擎,这样效率比 ...

  3. Android学习之 AChartEngine 图表绘制

    Android 开源图表绘制工具AChartEngine地址:http://code.google.com/p/achartengine/ AChartEngine Android实现图表绘制和展示( ...

  4. AChartEngine使用View显示图表

    学习过AChartEngine的人肯定都知道,使用ChartFactory创建一张图表可以使用Intent方法,之后调用StartActivity来启用这个Intent,但是这么左右一个坏处,就是当你 ...

  5. android开源项目学习

    FBReaderJ FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb.ePub和fb2.此外还支持直接读取zip.tar和gzip等压缩文档. 项目地址:ht ...

  6. 图表引擎AChartEngine 二

    这几天项目涉及到android图表绘制,网上找的Demo都是大同小异,也就如上篇博文所写的一样是基本函数的实现.可是所有能找到的Demo都和设计图不符.木有办法,Leader发话啦,万不得已的情况下不 ...

  7. achartengine画出动态折线图

    achartengine画出动态折线图的效果最近有个项目需要用到实时曲线图,我也上网搜索了一下,最后还是选择使用achartengine这个现成的东西,毕竟自己再canvas一下实在是太麻烦,而且项目 ...

  8. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  9. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

随机推荐

  1. MinGW平台 openjpeg-2.1.0 静态编译后未定义引用的解决方法

    undefined reference to __imp_opj_xxx keyword: ffmpeg,openjpeg,OPJ_EXPORTS,OPJ_STATIC,opj_version,__i ...

  2. ABAP ALV单个单元格状态编辑

    *&---------------------------------------------------------------------* *& Report  ZPPR0024 ...

  3. Effective C++ -----条款08: 别让异常逃离析构函数

    析构函数绝对不要吐出异常.如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序. 如果客户需要对某个操作函数运行期间抛出的异常作出反应,那么class应 ...

  4. java classpath批量设置shell脚本

    java classpath批量设置shell脚本   注意:linux bash jar文件之间的分隔符是':'    export JAR_HOME=path to directory which ...

  5. 【leetcode】Reverse Nodes in k-Group (hard)☆

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  6. MAC系统下,删除.svn文件

    MAC系统下,.svn文件是隐藏的. 如果项目是非export导出的,那么项目中会有很多的.svn文件. 如果项目的体积非常庞大,我们如何快速的批量删除.svn文件呢?下面是操作方法: 打开终端,cd ...

  7. vs win32 & MFC 指针默认位置

    一开始win32指针所在的位置是与debug文件夹同级的.即打开打开改程序的第一个文件夹这一级. MFC指针是在第二个debug下头,就是打开第二个project名词的文件夹下头,e.g., &quo ...

  8. 二、JavaScript语言--事件处理--DOM事件探秘

    第一章 事件流 事件:是文档或浏览器窗口中发生的.特定的交互瞬间.JavaScript和HTML之间的交互都是通过事件来实现的. 事件流:描述的是从页面中接受事件的顺序 IE:事件冒泡流 Netsca ...

  9. Scrapy爬取美女图片 (原创)

    有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...

  10. 【PHP&&mysqli】

    msyqli和mysql只有一个字母的差别,真正的含义是msyql的增强版扩展. MySQL可以处理满足程序员对MySQL数据库操作的各种需要了,为什么还需要mysqli呢?因为mysqli支持面性对 ...