因开发需要,App中需要用到图表的绘制,参考了网上的文章和Project Hosting on Google Code(项目地址为:https://code.google.com/p/achartengine/),写了一个简单的折线图的Demo.
下载下项目下的achartengine-1.0.0-demo-source.zip用于参考.
1.新建一个AbstractDemoChart抽象类和IDemoChart接口,在项目Demo中可以找到.
2.创建自己的图表显示类CustomerChart,主要功能是显示本周或者本月需要显示的信息,代码如下:
下载下项目下的achartengine-1.0.0-demo-source.zip用于参考.
1.新建一个AbstractDemoChart抽象类和IDemoChart接口,在项目Demo中可以找到.
2.创建自己的图表显示类CustomerChart,主要功能是显示本周或者本月需要显示的信息,代码如下:
public class CustomerChart extends AbstractDemoChart { private List<MonitorChartData> monitor_datas; private int chart_for; private int mode; private int year; private int month; private int day; public CustomerChart(){ } public CustomerChart(List<MonitorChartData> datas,int charfor,int mode,int y,int m,int d) { this.monitor_datas = datas; this.chart_for = charfor; this.mode = mode; this.year = y; this.month = m; this.day = d; } @Override public String getName() { return null; } @Override public String getDesc() { return null; } @Override public Intent execute(Context context) { // 如果未选择日期则默认以当前日期为准 if (this.mode == ChartUtil.MODE_MONTH || this.year == 0 || this.month == 0) { Calendar cal = Calendar.getInstance(); setYear(cal.get(Calendar.YEAR)); setMonth(cal.get(Calendar.MONTH)+1); setDay(cal.get(Calendar.DAY_OF_MONTH)); } String[] titles = new String[] { "平均值" }; // 设置坐标系下方说明两天线的注释 int[] colors = new int[] { Color.YELLOW }; // 设置两条线的颜色 PointStyle[] styles = new PointStyle[] { PointStyle.DIAMOND }; // 设置线上的点的样式 XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); // 根据颜色和样式初始化坐标系渲染 List<double[]> values_y = new ArrayList<double[]>(); // y轴数据集 List<double[]> values_x = new ArrayList<double[]>(); // x轴数据集 String chart_title = ""; // 图表标题和y轴标题 renderer.setXLabels(0); renderer.setYLabels(10); renderer.setShowGrid(true); // 设置显示刻度 renderer.setXLabelsAlign(Align.RIGHT); // 设置x轴刻度的数值显示在x轴的下方 renderer.setYLabelsAlign(Align.RIGHT); // 设置y轴刻度的数值显示在y轴的左方 renderer.setZoomButtonsVisible(true); // 设置可以缩放 renderer.setBackgroundColor(Color.GRAY); setColors(renderer, Color.WHITE, Color.WHITE); // 根据按月和按周的方式设置坐标系x轴上的label if (this.mode == ChartUtil.MODE_WEEK) { Log.e("CustomerChart", "MODE_WEEK"); // 在x轴上显示中文的label for (int i = 0; i < ChartUtil.WEEK_DAY.length; i++) { renderer.addXTextLabel(i + 1, ChartUtil.WEEK_DAY[i]); } // 设置X轴显示范围 setXLimits(renderer, 0, 7.5); } else if (this.mode == ChartUtil.MODE_MONTH) { Log.e("CustomerChart", "MODE_MONTH"); int dat_count = ChartDateUtil.getMonthDaysCount(this.year, this.month); // 根据计算出来的天数规定数据集的长度 // 在x轴上显示表示天数的标识 for (int k = 1; k <= dat_count; k++) { renderer.addXTextLabel(k, "" + k); } // 设置天数的显示范围 setXLimits(renderer, 0, dat_count + 1); } double avg_y[] = new double[monitor_datas.size()]; double avg_x[] = new double[monitor_datas.size()]; // 根据数据类型设置图表不同的渲染方式 switch (this.chart_for) { // 空气温度 case ChartUtil.ENV_TEMPERATURE: // 设置标题和y轴标题(常量) chart_title = ChartUtil.ENV_TEMPERATURE_TITLE; // 设置缩放范围 renderer.setPanLimits(ChartUtil.TEMPERATURE_LIMITES); renderer.setZoomLimits(ChartUtil.TEMPERATURE_LIMITES); // 根据周或者月模式取得的天数加载平均温度数据集 for (int i = 0; i < monitor_datas.size(); i++) { avg_y[i] = this.monitor_datas.get(i).getEnv_temperature(); avg_x[i] = this.monitor_datas.get(i).getDate_info(); } setXYTitles(renderer, chart_title, chart_title); // 设置表格的标题,y轴标题 setYLimits(renderer, -10, 45); // 设置y轴显示初始值范围 break; // 空气湿度 case ChartUtil.ENV_HUMIDITY: chart_title = ChartUtil.ENV_HUMIDITY_TITLE; renderer.setPanLimits(ChartUtil.HUMIDITY_LIMITES); renderer.setZoomLimits(ChartUtil.HUMIDITY_LIMITES); for (int i = 0; i < monitor_datas.size(); i++) { avg_y[i] = this.monitor_datas.get(i).getEnv_humidity(); avg_x[i] = this.monitor_datas.get(i).getDate_info(); } setXYTitles(renderer, chart_title, chart_title); setYLimits(renderer, -10, 45); break; // 土壤温度 case ChartUtil.SOIL_TEMPERATURE: chart_title = ChartUtil.SOIL_TEMPERATURE_TITLE; renderer.setZoomLimits(ChartUtil.HUMIDITY_LIMITES); renderer.setPanLimits(ChartUtil.TEMPERATURE_LIMITES); for (int i = 0; i < monitor_datas.size(); i++) { avg_y[i] = this.monitor_datas.get(i).getSoil_temperature(); avg_x[i] = this.monitor_datas.get(i).getDate_info(); } setXYTitles(renderer, chart_title, chart_title); setYLimits(renderer, -10, 45); break; // 土壤湿度 case ChartUtil.SOIL_HUMIDITY: chart_title = ChartUtil.SOIL_HUMIDITY_TITLE; renderer.setPanLimits(ChartUtil.HUMIDITY_LIMITES); for (int i = 0; i < monitor_datas.size(); i++) { avg_y[i] = this.monitor_datas.get(i).getSoil_humidity(); avg_x[i] = this.monitor_datas.get(i).getDate_info(); } setXYTitles(renderer, chart_title, chart_title); break; // 光照强度 case ChartUtil.ILLUMINATION: chart_title = ChartUtil.ILLUMINATION_TITLE; renderer.setPanLimits(ChartUtil.ILLUMINATION_LIMITES); for (int i = 0; i < monitor_datas.size(); i++) { avg_y[i] = this.monitor_datas.get(i).getIntensity_of_illumination(); avg_x[i] = this.monitor_datas.get(i).getDate_info(); } setXYTitles(renderer, chart_title, chart_title); break; // 二氧化碳浓度 case ChartUtil.CO2: chart_title = ChartUtil.CO2_TITLE; renderer.setPanLimits(ChartUtil.CO2_LIMITES); for (int i = 0; i < monitor_datas.size(); i++) { avg_y[i] = this.monitor_datas.get(i).getConcentration_of_CO2(); avg_x[i] = this.monitor_datas.get(i).getDate_info(); } setXYTitles(renderer, chart_title, chart_title); break; default: break; } values_y.add(avg_y); values_x.add(avg_x); StringBuffer actTitle = new StringBuffer(); actTitle.append(chart_title); DateRange dateRange = getBeginDate(year, month, day); actTitle.append(" ( "+dateRange.beginDate+" 到 "+dateRange.endDate+" ) "); Intent intent = ChartFactory .getLineChartIntent(context, buildDataset(titles, values_x, values_y), renderer, actTitle.toString()); return intent; } /** * 设置X轴显示范围 * * @param renderer * @param xMin * @param xMax */ private void setXLimits(XYMultipleSeriesRenderer renderer, double xMin, double xMax) { renderer.setXAxisMin(xMin); renderer.setXAxisMax(xMax); } /** * 设置Y轴显示范围 * * @param renderer * @param yMin * @param yMax */ private void setYLimits(XYMultipleSeriesRenderer renderer, double yMin, double yMax) { renderer.setYAxisMin(yMin); renderer.setYAxisMax(yMax); } /** * 设置标题 * * @param renderer * @param title * @param yTitle */ private void setXYTitles(XYMultipleSeriesRenderer renderer, String title, String yTitle) { renderer.setChartTitle(" "); renderer.setXTitle(" "); renderer.setYTitle(yTitle); } private void setColors(XYMultipleSeriesRenderer renderer, int axesColor, int labelsColor) { renderer.setAxesColor(axesColor); renderer.setLabelsColor(labelsColor); } @SuppressLint("SimpleDateFormat") private DateRange getBeginDate(int y,int m,int d){ String begin = ""; String end = ""; DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); if (ChartUtil.MODE_MONTH == mode) { List<Date> temp = ChartDateUtil.getMonthByYM(y, m); begin = df.format(temp.get(0)); end = df.format(temp.get(1)); return new DateRange(begin, end); } else if (ChartUtil.MODE_WEEK == mode) { List<Date> temp2 = ChartDateUtil.getWeekByDate(y, m, d); begin = df.format(temp2.get(0)); end = df.format(temp2.get(1)); return new DateRange(begin, end); } else { return null; } } private class DateRange { public String beginDate; public String endDate; public DateRange(String begin, String end) { this.beginDate = begin; this.endDate = end; } } public List<MonitorChartData> getMonitor_datas() { return monitor_datas; } public void setMonitor_datas(List<MonitorChartData> monitor_datas) { this.monitor_datas = monitor_datas; } public int getChart_for() { return chart_for; } public void setChart_for(int chart_for) { this.chart_for = chart_for; } public int getMode() { return mode; } public void setMode(int mode) { this.mode = mode; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } }
发表评论
-
Android下载功能的实现(参考Browser源码)
2014-05-23 16:55 01.实现DownloadHandler,为下载做准备。 ... -
Android中使用蓝牙
2013-10-15 16:43 6018原文地址:http://developer.and ... -
Sqlite3 基本指令(笔记)
2013-05-18 13:26 891.header ON|OFF设置是否显示数据表格的列名 .i ... -
Android 捕获App意外退出错误的日志信息
2013-05-08 17:57 35251.创建获取日志信息的类AppLogHandler,该类的 ... -
Android Fragment和ViewPage 实现简易可滑动Tab
2013-05-08 17:59 6297参考了Android Referencehttp://de ...
相关推荐
利用achartengine开源库做的一个绘图demo
android 绘制折线图(AChartEngine)Linechart 动态更新横轴为获取的当前时间
实现了折线图的实时动态更新,可以自定义X轴坐标,可是设置Y坐标的最大值和最小值,android 绘制折线图(AChartEngine)Linechart 动态更新横轴为获取的当前时间
本次代码用于利用achartengine绘制折线图,分析了achartengine得主要结构方法,适用于初学者参考学习
基于achartengine双Y轴动态图表Android源码,画的是折线图随x轴移动并实时更新数据,当然也可以弄成别的图,长时间运行内存不会溢出,WHO用WHO开心
一开始是使用第三方的绘图框架Achartengine来绘制,能实现一大部分的图形。可针对公司产品天马行空的想象显然Achartengine已经不能满足现在的项目了。为此小编我只能尝试着自己自定义一些图表类的控件。这里给大家...
在Android 中,有一个名为 AChartEngine的绘图库,可以供开发者调用,方便的在Android 开发中绘制如折线图、饼状图等图形。
android上的绘图库,可以绘制折线图,饼图,柱状图等,带Java doc 和demo。
android 开发中经常会用到绘制各种图表,例如折线图 趋势图、饼图。这个开源的项目为各种图形的制作提供了完美的解决方案,API很完善、方便我们定制个性需求的图表展示
ChartEngine支持的图表类型:折线图、区域图、散点图、时间图、柱状图、饼状图、气泡式图表、环形图、高低交替图等。 以上每种图表都可以包含多个序列, 可以将X轴以水平或垂直的形式显示,也支持很多自定义的特性。...
ChartEngine支持的图表类型:折线图、区域图、散点图、时间图、柱状图、饼状图、气泡式图表、环形图、高低交替图等。 以上每种图表都可以包含多个序列, 可以将X轴以水平或垂直的形式显示,也支持很多自定义的特性。...
Android studio利用Achartengine库画手机自带传感器实时数据,并实时显示曲线,可以导出历史数据等
ChartEngine支持的图表类型:折线图、区域图、散点图、时间图、柱状图、饼状图、气泡式图表、环形图、高低交替图等。 以上每种图表都可以包含多个序列, 可以将X轴以水平或垂直的形式显示,也支持很多自定义的特性。...
achartengine-1.1.0.jar 用于在android上绘制曲线图和趋势图 它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表
android绘制统计图Demo,这里提供了绘制折线、扇形、条形三种统计图。欢迎下载。
基于achartengine的Android源码,画的是折线图随x轴为时间轴移动并实时更新数据,首先绘制时间轴的曲线图。自己制作的一个简单的demo,希望给你有用。
由于Google提供的AChartEngine的功能强大但使用起来较为复杂,MPAndroidChart同样能够实现一些效果较好的直方图,折线图,饼图等绘制,使用也较为简单轻便; 介绍MPAndroidChart
AChartEngine(简称ACE)是Google的一个开源图表库(for Android)。它功能强大,支持散点图、折线等