下面附上代码加注解

package com.example.com.my_achartnegine;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Paint; import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart;
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 java.util.List; /**
* Created by Administrator on 2016/7/28.
*/
public class ChartService {
private GraphicalView mGraphicalView;
private XYMultipleSeriesDataset multipleSeriesDataset;// 数据集容器
private XYMultipleSeriesRenderer multipleSeriesRenderer;// 渲染器容器
private XYSeries mSeries;// 单条曲线数据集
private XYSeriesRenderer mRenderer;// 单条曲线渲染器
private Context context; public ChartService(Context context) {
this.context = context;
} /**
* 获取图表
*
* @return
*/
public GraphicalView getGraphicalView() {
mGraphicalView = ChartFactory.getLineChartView(context,
multipleSeriesDataset, multipleSeriesRenderer);
return mGraphicalView;
} public GraphicalView getGraphicalView_Bar() {
mGraphicalView = ChartFactory.getBarChartView(context, multipleSeriesDataset, multipleSeriesRenderer,
BarChart.Type.STACKED);
// ChartFactory.getCubeLineChartView(context,
// multipleSeriesDataset, multipleSeriesRenderer, 0f);//最后一个参数是曲线的弧度
return mGraphicalView;
} /**
* 获取数据集,及xy坐标的集合
*
* @param curveTitle
*/
public void setXYMultipleSeriesDataset(String curveTitle) {
multipleSeriesDataset = new XYMultipleSeriesDataset();
mSeries = new XYSeries(curveTitle);
multipleSeriesDataset.addSeries(mSeries);
} /**
* 获取渲染器
*
* @param maxX x轴最大值
* @param maxY y轴最大值
* @param chartTitle 曲线的标题
* @param xTitle x轴标题
* @param yTitle y轴标题
* @param axeColor 坐标轴颜色
* @param labelColor 标题颜色
* @param curveColor 曲线颜色
* @param gridColor 网格颜色
*/
public void setXYMultipleSeriesRenderer(double maxX, double maxY,
String chartTitle, String xTitle, String yTitle, int axeColor,
int labelColor, int curveColor, int gridColor) {
multipleSeriesRenderer = new XYMultipleSeriesRenderer();//获得一个渲染器
if (chartTitle != null) {//对系统的优化
multipleSeriesRenderer.setChartTitle(chartTitle);
}
multipleSeriesRenderer.setXTitle(xTitle);//设置X轴标识
multipleSeriesRenderer.setYTitle(yTitle);//设置Y轴标识
multipleSeriesRenderer.setRange(new double[]{0, maxX, 0, maxY});//xy轴的范围
multipleSeriesRenderer.setLabelsColor(labelColor);
// multipleSeriesRenderer.setXLabels(5);//设置段数
// multipleSeriesRenderer.setYLabels(5);
// multipleSeriesRenderer.setXLabelsAlign(Paint.Align.CENTER); //设置X、y轴数字的位置
// multipleSeriesRenderer.setYLabelsAlign(Paint.Align.RIGHT);
// multipleSeriesRenderer.setAxisTitleTextSize(10);
// multipleSeriesRenderer.setChartTitleTextSize(10);//设置X、y轴的标识大小
// multipleSeriesRenderer.setLabelsTextSize(10);//设置X、y轴数字的大小
// multipleSeriesRenderer.setLegendTextSize(10);
// multipleSeriesRenderer.setPointSize(2f);//曲线描点尺寸
// multipleSeriesRenderer.setFitLegend(false);// 调整合适的位置
multipleSeriesRenderer.setMargins(new int[]{20, 30, 15, 20});
// multipleSeriesRenderer.setShowGrid(false);
multipleSeriesRenderer.setBarSpacing(0.5f);//柱子间宽度
multipleSeriesRenderer.setZoomEnabled(true, false);//设置放大镜
multipleSeriesRenderer.setAxesColor(axeColor);
multipleSeriesRenderer.setGridColor(gridColor);
// multipleSeriesRenderer.setBackgroundColor(Color.WHITE);//背景色
// multipleSeriesRenderer.setMarginsColor(Color.WHITE);//边距背景色,默认背景色为黑色,这里修改为白色
mRenderer = new XYSeriesRenderer();//主要是用来设置一条线条的风格,颜色啊,粗细之类的。
mRenderer.setColor(curveColor);
// mRenderer.setPointStyle(PointStyle.CIRCLE);//描点风格,可以为圆点,方形点等等
multipleSeriesRenderer.addSeriesRenderer(mRenderer);
} /**
* 根据新加的数据,更新曲线,只能运行在主线程
*
* @param x 新加点的x坐标
* @param y 新加点的y坐标
*/
public void updateChart(double x, double y) {
mSeries.add(x, y);
mGraphicalView.repaint();//此处也可以调用invalidate()
} /**
* 添加新的数据,多组,更新曲线,只能运行在主线程
*
* @param xList
* @param yList
*/
public void updateChart(List<Double> xList, List<Double> yList) {
for (int i = 0; i < xList.size(); i++) {
mSeries.add(xList.get(i), yList.get(i));
}
mGraphicalView.repaint();//此处也可以调用invalidate()
}
}

下面是MainActivity的代码

package com.example.com.my_achartnegine;

import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.view.ViewGroup.LayoutParams; import org.achartengine.GraphicalView; import java.util.Timer;
import java.util.TimerTask; public class MainActivity extends AppCompatActivity { private LinearLayout mLeftCurveLayout;//存放左图表的布局容器
private LinearLayout mRightCurveLayout;//存放右图表的布局容器
private GraphicalView mView, mView2;//左右图表
private ChartService mService, mService2;
private Timer timer; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mLeftCurveLayout = (LinearLayout) findViewById(R.id.left_temperature_curve);
mRightCurveLayout = (LinearLayout) findViewById(R.id.right_temperature_curve); mService = new ChartService(this);
mService.setXYMultipleSeriesDataset("左温度曲线");
mService.setXYMultipleSeriesRenderer(100, 100, "左温度曲线", "时间", "温度",
Color.BLUE, Color.GREEN, Color.RED, Color.BLACK);
mView = mService.getGraphicalView(); mService2 = new ChartService(this);
mService2.setXYMultipleSeriesDataset("右温度曲线");
mService2.setXYMultipleSeriesRenderer(100, 100, "右温度曲线", "时间", "温度",
Color.RED, Color.RED, Color.RED, Color.BLACK);
mView2 = mService2.getGraphicalView_Bar(); //将左右图表添加到布局容器中
mLeftCurveLayout.addView(mView, new ViewGroup.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mRightCurveLayout.addView(mView2, new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.sendMessage(handler.obtainMessage());
}
}, 10, 1000);
} private int t = 0;
private Handler handler = new Handler() {
@Override
//定时更新图表
public void handleMessage(Message msg) {
mService.updateChart(t, Math.random() * 100);
mService2.updateChart(t, Math.random() * 100);
t += 5;
}
}; @Override
protected void onDestroy() {
super.onDestroy();
if (timer != null) {
timer.cancel();
}
}
}

个别的属性和更多的设置请自行查找官方说明并调试

Android开发之AChartEngine的使用的更多相关文章

  1. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  2. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  3. Android开发之Git配置

    Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...

  4. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  5. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  6. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  7. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  8. Android开发之PopupWindow

      /* *  Android开发之PopupWindow * *  Created on: 2011-8-8 *  Author: blueeagle *  Email: liujiaxiang@g ...

  9. [置顶] Android开发之MediaPlayerService服务详解(一)

    前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ...

随机推荐

  1. Oracle检查锁及其等待的行ROWID

    SELECT l.session_id sid ,        substr(o.owner,               1,               8) owner,        o.o ...

  2. MySQL 存储表情字符

    摘要 在 MySQL 中直接存储表情的时候,会出现无法插入数据的错误. 这是由于一般情况下,MySQL 的字符集是 utf8,而对于 emoji 表情的 mysql 的 utf8 字符集是不支持,需要 ...

  3. 双显卡笔记本安装CUDA+theano、tensorflow环境

    原文出处:http://www.cnblogs.com/jacklu/p/6377820.html 个人知乎主页欢迎关注:https://www.zhihu.com/people/jack_lu,相信 ...

  4. matlab 自定义函数及调用

    这一篇博客主要学习了: 第一,自定义函数优点有很多,比如可重复利用:容易纠错,以后直接装入大工程里(更重要的是,实参是复制给形参的,在自定义函数中运行时形参独立显示,这一点和C不一样). 第二,通过h ...

  5. table中td的宽度不随文字变宽

    1.设置了table的宽度后,宽度仍然不固定,td的内容一多,很容易吧table撑变形.有些时候我们需要设置固定的宽度. 解决办法 table的css 加入样式  table-layout:fixed ...

  6. 学习ui-router

    ui-router的学习 在单页面应用中要把各个分散的视图给组织起来是通过路由机制来实现的.Angular原始的路由机制靠ngRoute提供,通过hash和history来实现的,可以检测浏览器是否支 ...

  7. webqq的注册登记和聊天页面--运用jsonp跨域

    简介: 我们知道,ajax用于数据交互,但它不能跨域,跨域是指从一个域名的网页去请求另一个域名的资源.比如从http://www.baidu.com/ 页面去请求 http://www.google. ...

  8. 一个web应用的诞生(6)--用户账户

    之前登录注册的功能都已经完成,但是登录成功回到首页发现还是白茫茫的一片,对的,title一直都写得博客,那么最终目的也是写出一个轻博客来,但是,在发表文章之前是不是要先记录一下登录状态呢? 用户登录 ...

  9. leetcode-1006 Construct Binary Tree from Inorder and Postorder Traversal

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  10. jquery序列化form表单

    在开发中有时需要在js中提交form表单数据,就需要将form表单进行序列化. jquery提供的serialize方法能够实现. $("#searchForm").seriali ...