【Android 应用开发】Android 图表绘制 achartengine 示例解析

作者 : 韩曙亮

转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38420197



一. AChartEngine 简介



1. 项目地址


AChartEngine 简介 : AChartEngine 是 Android 平台的图表开发库, 能绘制 折线图, 饼图, 气泡图, 柱状图, 散点图, 面积图等统计图表;


最新版本 : 1.1.0 版本;


AChartEngine 地址 : https://code.google.com/p/achartengine/ ;

-- 示例代码下载地址 : https://achartengine.googlecode.com/files/achartengine-1.1.0-demo-source.zip;

-- 参考文档下载地址 : https://achartengine.googlecode.com/files/achartengine-1.1.0-javadocs.zip;

-- jar包下载地址 : https://achartengine.googlecode.com/files/achartengine-1.1.0.jar;


CSDN资源下载 : http://download.csdn.net/detail/han1202012/7741579;

-- Google被墙因素 : 鉴于 Google 被河蟹了, 提供 CSDN 资源下载最新的 AChartEngine-1.1.0 版本的 JAR包 文档 和 示例程序;



2. AChartEngine 运行机制


AChartEngine 运行示例图 : 每个图表都需要一个数据集 (Dataset) 和 渲染器集合 (Renderer);

-- 数据集 : 又由许多数据组成, 

-- 渲染器 : 也由不同的子渲染器组成, 

-- 获取Activity 或 组件 : 图表工厂 (ChartFactory) 通过调用 数据集 (Dataset) 和 渲染器集合 (Renderer) 可以生成带图表的 GraphicalView 或者 GraphicalActivity;



AChartEngine 相关类介绍

-- ChartFactory : 图表生成的工厂类, 通过你传入 数据集 和 渲染器集合, 即可生成 GraphicalView 或者 GraphicalActivity;

-- XYMultipleSeriesDataset : 数据集, 其中可以封装图表所需的数据;

-- XYSeries : 属于 图表数据集的一部分, 每个都代表了一个数据集合 例如 折线, 一个图表中可以有多条折线, 所有的数据放在一起就是 数据集 XYMultipleSeriesDataset ;

-- XYMultipleSeriesRenderer : 渲染器集合, 图表中多个曲线的渲染器;

-- XYSeriesRenderer : 单个曲线或单元的渲染器, 一个图表中可能有多条曲线或者柱状图等, 每个都需要一个渲染器, 所有的渲染器放在一起就是渲染器集合 XYMultipleSeriesRenderer;



二. AChartEngine 主要代码解析



1. 曲线图 柱状图 图表数据集



(1) 针对 x y 轴数据都是 Double 的情况 


相关类介绍

-- XYMultipleSeriesDataset 类 : 该类可以封装 曲线图 柱状图 等图表的数据集, 这些图表的共性是值都是由 x 和 y 数值组成的, 需要分别传入 x 轴数据 和 y 轴数据;

-- XYSeries 类 : 图表中有多个曲线, 该类封装单个曲线的集合, XYMultipleSeriesDataset 封装了多个 XYSeries;


需要准备的数据  

-- 单组数据名称集合 : String[] titles, 单组数据名称 每条曲线可能有一个名称, 一个图表可能有多个曲线, 因此这里需要一个 标题数组;

-- x轴数据组集合 : List<double[]> xValues, x 轴数据集合, 其中每个数组都是一个 曲线的x轴数据, 整个 List 集合是多个曲线的数据;

-- y轴数据组集合 : List<double[]> yValues, y 轴数据集合, 整个 List 集合是多个曲线的 y 轴数据集合;


相关方法详解

-- 创建 XYMultipleSeriesDataset 对象 : 直接调用无参数的构造方法即可, XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

-- 创建 XYSeries 对象 : 该对象是单条曲线数据, 可以设置 单条曲线标题, x 轴数据数组, y 轴数据数组, XYSeries series = new XYSeries(String titles, float scale);

-- 为单个曲线添加数据 : 即未 XYSeries 对象添加两个数组, 分别是 x 轴和 y 轴的数据, series.add(xV[k], yV[k]);

-- 将 XYSeries 对象添加到 XYMultipleSeriesDataset 对象中 : dataset.addSeries(series);


代码示例

  /*** 曲线图(数据集) : 创建曲线图图表数据集* * @param 赋予的标题* @param xValues x轴的数据* @param yValues y轴的数据* @return XY轴数据集*/protected XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues,List<double[]> yValues) {XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();/* 创建图表数据集 */addXYSeries(dataset, titles, xValues, yValues, 0);				/* 添加单条曲线数据到图表数据集中 */return dataset;}/*** 曲线图(被调用方法) : 添加 XY 轴坐标数据 到 XYMultipleSeriesDataset 数据集中* * @param dataset 最后的 XY 数据集结果, 相当与返回值在参数中* @param titles	要赋予的标题* @param xValues	x轴数据集合* @param yValues	y轴数据集合* @param scale	缩放* * titles 数组个数 与 xValues, yValues 个数相同* tittle 与 一个图标可能有多条曲线, 每个曲线都有一个标题* XYSeries 是曲线图中的 一条曲线, 其中封装了 曲线名称, X轴和Y轴数据*/public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues,List<double[]> yValues, int scale) {int length = titles.length;							/* 获取标题个数 */for (int i = 0; i < length; i++) {XYSeries series = new XYSeries(titles[i], scale);	/* 单条曲线数据 */double[] xV = xValues.get(i);						/* 获取该条曲线的x轴坐标数组 */double[] yV = yValues.get(i);						/* 获取该条曲线的y轴坐标数组 */int seriesLength = xV.length;for (int k = 0; k < seriesLength; k++) {series.add(xV[k], yV[k]);						/* 将该条曲线的 x,y 轴数组存放到 单条曲线数据中 */}dataset.addSeries(series);						/* 将单条曲线数据存放到 图表数据集中 */}}


(2) x 轴是日期 y 轴是 Double


相关类介绍

-- XYMultipleSeriesDataset : 这种 日期-值 图, 使用的图表数据集也是该类;

-- TimeSeries : 这里就不同了, 单个曲线的数据中因为要封装 Date 数组, 因此要使用该类封装 Date[] 和 Double[] 数据;


需要准备的数据

-- String[] titles : 图表中有多个折线, 数组中每个元素都是一个折线的标题;

-- List<Date[]> xValues : List 集合中每个 Date[] 都是一条曲线的 x 轴数据;

-- List<double[]> yValues : List 集合中每个 double[] 都是一条曲线的 y 轴数据;


相关方法介绍

-- 创建单条曲线数据 TimeSeries 对象 : TimeSeries series = new TimeSeries(titles[i]), 参数是该条曲线的标题名称;

-- 设置 日期 和 值数组给 TimeSeries 对象 : series.add(xV[k], yV[k]);

-- TimeSeries 对象设置给 XYMultipleSeriesDataset 对象 : dataset.addSeries(series);


代码示例

  /*** 曲线图(日期数据集) : 创建曲线图数据集, x轴是日期, y轴是具体的数值* * @param titles 各条曲线的标题, 放在一个数组中* @param xValues x轴的日志值数组组成的集合* @param yValusey轴具体的数据值数组组成的集合* @return 具体的曲线图图表*/protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List<Date[]> xValues,List<double[]> yValues) {XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();/* 创建图表数据集 */int length = titles.length;										/* 获取曲线个数, 每个曲线都有一个标题 */for (int i = 0; i < length; i++) {TimeSeries series = new TimeSeries(titles[i]);				/* 带日期的单条曲线数据 */Date[] xV = xValues.get(i);									/* 获取该条曲线数据的 日期数组 */double[] yV = yValues.get(i);									/* 获取该条曲线数据的 值数组 */int seriesLength = xV.length;									/* 获取该条曲线的值的个数, 即x轴点个数 */for (int k = 0; k < seriesLength; k++) {series.add(xV[k], yV[k]);									/* 将日期数组 和 值数组设置给 带日期的单条曲线数据 */}dataset.addSeries(series);									/* 将单条曲线数据设置给 图标曲线数据集 */}return dataset;}


2. 曲线图图表渲染器



(1) 曲线渲染


相关类介绍

-- XYMultipleSeriesRenderer : 曲线图整体渲染器, 其中封装了许多 XYSeriesRenderer 单曲线渲染器;

-- XYSeriesRenderer : 单个曲线渲染器, 设置曲线的颜色 和 风格样式;


数据准备

-- int[] colors : 颜色集合, 每种曲线都要有一个颜色值;

-- PointStyle[] styles : 曲线样式集合, 每条曲线都有其绘制样式;


XYMultipleSeriesRenderer 相关方法介绍

-- 设置 xy 轴标题字体大小 : setAxisTitleTextSize(int size);

-- 设置表格标题大小 : setChartTitleTextSize(int size);

-- 设置标签文字大小 : setLabelsTextSize(int size);

-- 设置说明文字大小 : setLegendTextSize(int size);

-- 设置点的大小: setPointSize(int size);

-- 添加单曲线渲染器 : addSeriesRenderer(render);


XYSeriesRenderer 相关方法介绍

-- 创建对象 : XYSeriesRenderer r = new XYSeriesRenderer();

-- 设置单个曲线颜色 : r.setColor(colors[i]);

-- 设置单个曲线绘制风格 : r.setPointStyle(styles[i]);


代码示例

  /*** 曲线图(渲染器) : 创建曲线图图表渲染器 * * @param 每条曲线要渲染的颜色, 把这些颜色放入数组* @param 每条曲线绘制点的风格* @return 数据渲染器集合*/protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();/* 创建曲线图图表渲染器 */setRenderer(renderer, colors, styles);							   /* 为曲线图渲染器设置颜色和样式 */return renderer;}/*** 曲线图(渲染器 - 被调用方法) : 设置坐标轴渲染器* * @param renderer 设置的渲染器集合, 这个参数相当与返回值, 设置渲染器结果保存在这个参数中* @param colors	 要渲染的颜色集合* @param styles	 要渲染的样式集合*/protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {renderer.setAxisTitleTextSize(16);					/* 设置XY轴标题字体大小 */renderer.setChartTitleTextSize(20);					/* 设置表格标题文字大小 */renderer.setLabelsTextSize(15);						/* 设置标签文字大小 */renderer.setLegendTextSize(15);						/* 设置说明文字大小 */renderer.setPointSize(5f);							/* 设置点的大小 */renderer.setMargins(new int[] { 20, 30, 15, 20 });	/* 设置 margin, 单位像素 */int length = colors.length;							/* 获取渲染器的个数, 即有多少条曲线 */for (int i = 0; i < length; i++) {XYSeriesRenderer r = new XYSeriesRenderer();		/* 单个曲线的渲染器 */r.setColor(colors[i]);							/* 为单个曲线渲染器设置曲线颜色 */r.setPointStyle(styles[i]);						/* 为单个曲线渲染器设置曲线风格 */renderer.addSeriesRenderer(r);					/* 将单个曲线渲染器设置到渲染器集合中 */}}


(2) 坐标轴设置 


渲染器参数设置 : 坐标轴渲染主要是对 XYMultipleSeriesRenderer 进行一系列的参数设置, 都是调用的 XYMultipleSeriesRenderer 对象中的方法;

-- 设置曲线标题 : setChartTitle(String tittle);

-- 设置 x 轴标题 : setXTitle(String tittle);

-- 设置 y 轴标题 : setYTitle(String tittle);

-- 设置 x 轴最小值 : setXAxisMin(double);

-- 设置 x 轴最大值 : setXAxisMax(double);

-- 设置 y 轴最小值 : setYAxisMin(double);

-- 设置 y 轴最大值 : setYAxisMax(double);

-- 设置坐标轴颜色 : setAxesColor();

-- 设置标签颜色 : setLabelsColor();


代码示例

  /*** 坐标轴(渲染器) : 对曲线图渲染器进行配置, 主要配置坐标轴* * @param renderer 要进行配置的渲染器* @param title 图表的名称* @param xTitle x轴坐标的名称* @param yTitle y轴坐标的名称* @param xMin x轴最小值* @param xMax x轴最大值* @param yMin y轴最小值* @param yMax y轴最大值* @param axesColor 坐标轴的颜色* @param labelsColor 标签的颜色*/protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,int labelsColor) {renderer.setChartTitle(title);			/* 设置曲线图标题 */renderer.setXTitle(xTitle);				/* 设置x轴标题 */renderer.setYTitle(yTitle);				/* 设置y轴标题 */renderer.setXAxisMin(xMin);				/* 设置x轴最小值 */renderer.setXAxisMax(xMax);				/* 设置x轴最大值 */renderer.setYAxisMin(yMin);				/* 设置y轴最小值 */renderer.setYAxisMax(yMax);				/* 设置y轴最大值 */renderer.setAxesColor(axesColor);		/* 设置坐标轴颜色 */renderer.setLabelsColor(labelsColor);	/* 设置标签颜色 */}


3. 饼图数据集



(1) 单个饼图数据集


相关类介绍

-- CategorySeries : 饼图数据集;


相关方法介绍

-- 添加数据元素 : CategorySeries.add(String category, double value), 参数分别是 名称 和 值;


代码示例

  /*** 饼图(单数据) : 创建只包含一个饼图的图表数据集* * @param titles 饼图的标题* @param values 饼图的值组成的数组* @return 返回饼图*/protected CategorySeries buildCategoryDataset(String title, double[] values) {CategorySeries series = new CategorySeries(title);	/* 创建单个饼状图数据, 传入饼状图标题 */int k = 0;for (double value : values) {series.add("Project " + ++k, value); 				/* 键值对, 键是饼图元素的标题, 值是大小 */}return series;}


(2) 多饼图图表数据集


相关类介绍

-- MultipleCategorySeries : 多饼图图表数据集, 该类对象与单饼图图表数据集 CategorySeries 对象没有包含关系;


准备数据

-- 饼图每个元素名称 : List<String[]> titles, 其中集合中的数组就是一个饼图每个元素的集合;

-- 饼图每个元素的大小 : List<double[]> values, 其中的数组就是一个饼图每个元素的大小;


相关方法介绍

-- 创建多饼图数据集 : MultipleCategorySeries series = new MultipleCategorySeries(title), 传入图表的名称; 

-- 添加一个饼图的数据 : series.add(tittle, titles.get(k), value), 第一个参数是单个饼图名称, 第二个参数是饼图元素名称字符串数组, 第三个是饼图元素大小 double[] 数组;


示例代码

  /*** 饼图(数据集) : 创建包含多个饼图的图表数据集* 	多个饼图通过大小环嵌套形式展示* * @param titles 图表的标题* @param tittles 图表中 每个饼图的标题 组成的数组* @param values 饼图的值组成的数组 组成的集合* @return 返回饼图图表*/protected MultipleCategorySeries buildMultipleCategoryDataset(String title,List<String[]> titles, List<double[]> values) {MultipleCategorySeries series = new MultipleCategorySeries(title);	/* 多个饼图组成的图表 */int k = 0;for (double[] value : values) {/** 第一个参数是 饼图的名称* 第二个参数是 饼图的元素名称组成的数组* 第三个参数是 饼图的元素对应的数值组成的数组SimpleSeriesRenderer* * 注意 饼图元素名称数组 与 饼图值数组 个数是相同的, 并且是对应的*/series.add(2007 + k + "", titles.get(k), value);k++;}return series;}


4. 饼图渲染器


相关类介绍

-- DefaultRenderer : 饼图渲染器, 单饼图 和 多饼图使用的渲染器都是同一个;

-- DefaultRenderer : 饼图单个元素渲染器, 一个饼图有多个该渲染器渲染, 整个图表有多组该渲染器;


数据准备

-- 饼图元素的颜色 : int[] colors, 将饼图中所有的颜色放在一个数组中, 每个元素都有一个颜色;


DefaultRenderer 类方法介绍

-- 构造方法 : DefaultRenderer renderer = new DefaultRenderer();

-- 设置标签文字大小 : setLabelsTextSize(int size);

-- 设置说明文字大小 : setLegendTextSize(int size);

-- 设置边距 : setMargins(new int[] { 20, 30, 15, 0 });

-- 添加SimpleSeriesRenderer对象到该渲染器集合 : addSeriesRenderer(r);


SimpleSeriesRenderer 方法

-- 构造函数 : SimpleSeriesRenderer r = new SimpleSeriesRenderer();

-- 设置颜色 : setColor(color);


示例代码

  /*** 饼图(渲染器) : 使用现有颜色创建饼图渲染器* * @param colors 颜色数组* @return 返回饼图渲染器*/protected DefaultRenderer buildCategoryRenderer(int[] colors) {DefaultRenderer renderer = new DefaultRenderer();		/* 默认的饼图图表渲染器 */renderer.setLabelsTextSize(15);							/* 设置标签文字大小 */renderer.setLegendTextSize(15);							/* 设置说明文字大小 */renderer.setMargins(new int[] { 20, 30, 15, 0 });		/* 设置边距 */for (int color : colors) {SimpleSeriesRenderer r = new SimpleSeriesRenderer();	/* 饼状图中单个数据的颜色渲染器 */r.setColor(color);renderer.addSeriesRenderer(r);						/* 将单个元素渲染器设置到饼图图表渲染器中 */}return renderer;}


5. 柱状图数据集


相关类介绍

-- XYMultipleSeriesDataset : 封装柱状图的数据, 其中可能有多个柱状图, 每个都封装了若干个 CategorySeries 单个数据集对象;

-- CategorySeries : 柱状图图表中单个柱状图的数据, 可以被封装入 XYMultipleSeriesDataset 数据集中;


数据准备

-- 柱状图标题 : String[] titles, 由于一个柱状图图表中可能有多个柱状图, 因此需要一个字符串数组存放这些标题;

-- 柱状图值 : List<double[]> values, 集合中的每个数组都代表了一个柱状图的值;


CategorySeries 方法介绍

-- 构造函数 : CategorySeries series = new CategorySeries(titles[i]), 传入的参数是柱状图的值;

-- 设置值大小 : series.add(double), 具体的值需要一个一个去设定;

-- 转换类型 : series.toXYSeries(), 只有转换成 XYSeries 对象, 才能加入到 XYMultipleSeriesDataset 对象中;


示例代码

  /*** 柱状图(数据集) : 使用现有的数据, 创建一个柱状图数据集* * @param titles 柱状图名称数组* @param values 每个柱状图中具体的多个值组成的数组 组成的 集合* @return the XY multiple bar dataset*/protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) {XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();	/* 创建 XYMultipleSeriesDataset对象, 图表的总数据集 */int length = titles.length;											/* 获取图表中柱状图个数 */for (int i = 0; i < length; i++) {CategorySeries series = new CategorySeries(titles[i]);			/* 创建一个 CategorySeries对象, 单个柱状图数据 */double[] v = values.get(i);										/* 获取本柱状图数值数组 */int seriesLength = v.length;										/* 获取单个柱状图值的个数 */for (int k = 0; k < seriesLength; k++) {							series.add(v[k]);												/* 将具体的值设置给 CategorySeries对象, 单个柱状图数据 */}dataset.addSeries(series.toXYSeries());							/* 将单个柱状图数据 CategorySeries对象 设置给 图表数据集 XYMultipleSeriesDataset对象 */}return dataset;}


6. 柱状图渲染器


相关类介绍

-- XYMultipleSeriesRenderer : 柱状图渲染器集合, 与曲线图的渲染器是一样的, 其中封装了很多 SimpleSeriesRenderer 对象;

-- SimpleSeriesRenderer : 柱状图中的单个柱状图渲染器, 可以封装到 XYMultipleSeriesRenderer 对象中;


准备数据

-- 柱状图颜色 : int[] colors, 一个柱状图的图表中含有若干个柱状图, 每个柱状图都设定一个颜色;


代码示例

  /*** 柱状图(渲染器) : 创建柱状图渲染器* * @param colors 柱状图的颜色数组* @return 返回柱状图渲染器colors*/protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();	/* 创建图表渲染器 */renderer.setAxisTitleTextSize(16);									/* 设置坐标轴标题字体大小 */renderer.setChartTitleTextSize(20);									/* 设置图表标题字体大小 */renderer.setLabelsTextSize(15);										/* 设置标签字体大小 */renderer.setLegendTextSize(15);										/* 设置说明文字字体大小 */int length = colors.length;											/* 获取图表中柱状图个数 */for (int i = 0; i < length; i++) {SimpleSeriesRenderer r = new SimpleSeriesRenderer();				/* 单个柱状图渲染器 */r.setColor(colors[i]);											/* 为单个柱状图渲染器设置颜色 */renderer.addSeriesRenderer(r);									/* 将单个柱状图渲染器设置给图表渲染器 */}return renderer;}


三. 销售额对比图(折线图 面积图)示例


需求分析 : 给出 2007 年和 2008 年销售额, 将销售额绘制到折线图中, 并将它们的差绘制到面积图中;


package org.achartengine.chartdemo.demo.chart;import java.util.ArrayList;
import java.util.List;import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer.FillOutsideLine;import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;/*** 销售额对比图表*/
public class SalesComparisonChart extends AbstractDemoChart {/*** 获取图表名称* * @return 图表名称*/public String getName() {return "销售额对比";}/*** 获取图表的描述信息* * @return 返回图表的详细信息*/public String getDesc() {return "2年内的月度销售额发展 (插入了 折线图 和 面积图)";}/*** 获取图表* * @param context 上下文对象* @return the built intent*/public Intent execute(Context context) {String[] titles = new String[] { "2008 年销售额", "2007 年销售额","2008年销售额与2007年对比" };/* 初始化数据集 */List<double[]> values = new ArrayList<double[]>();/* 2008年销售额 */values.add(new double[] { 14230, 12300, 14240, 15244, 14900, 12200, 11030, 12000, 12500, 15500,14600, 15000 });/* 2007年销售额 */values.add(new double[] { 10230, 10900, 11240, 12540, 13500, 14200, 12530, 11200, 10500, 12500,11600, 13500 });/* 计算出两年销售额的对比差 2008年 减去 2007年 */int length = values.get(0).length;double[] diff = new double[length];for (int i = 0; i < length; i++) {diff[i] = values.get(0)[i] - values.get(1)[i];}values.add(diff);/* 第一条线 蓝色 08年销售额, 第二条线 蓝绿色 07年销售额, 第三个面积图 绿色 两年销售额对比 */int[] colors = new int[] { Color.BLUE, Color.CYAN, Color.GREEN };PointStyle[] styles = new PointStyle[] { PointStyle.POINT, PointStyle.POINT, PointStyle.POINT };/* 创建图表渲染器 */XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);setChartSettings(renderer,  /* 渲染器 */"两年内的月度销售额", 	/* 图表标题 */"月份", 			    /* x轴标题 */"销售单位", 			/* y轴标题 */0.75,				/* x轴最小值 */12.25, 				/* x轴最大值 */-5000, 				/* y轴最小值 */19000, 				/* y轴最大值 */Color.GRAY, 		/* 坐标轴颜色 */Color.LTGRAY);		/* 标签颜色 标签即 图表标题 xy轴标题 */renderer.setXLabels(12);								/* 设置 x 轴刻度个数 */renderer.setYLabels(10);								/* 设置 y 轴刻度个数 */renderer.setChartTitleTextSize(20);						/* 设置表格标题字体大小 */renderer.setTextTypeface("sans_serif", Typeface.BOLD);	/* 设置字体 */renderer.setLabelsTextSize(14f);						/*  */renderer.setAxisTitleTextSize(15);renderer.setLegendTextSize(15);length = renderer.getSeriesRendererCount();for (int i = 0; i < length; i++) {/* 获取具体的 渲染器 */XYSeriesRenderer seriesRenderer = (XYSeriesRenderer) renderer.getSeriesRendererAt(i);if (i == length - 1) {/* 单独对面积图渲染器进行设置 */FillOutsideLine fill = new FillOutsideLine(FillOutsideLine.Type.BOUNDS_ALL);fill.setColor(Color.GREEN);seriesRenderer.addFillOutsideLine(fill);}/* 设置折线图渲染器 */seriesRenderer.setLineWidth(2.5f);seriesRenderer.setDisplayChartValues(true);seriesRenderer.setChartValuesTextSize(10f);}/*  */GraphicalView view = ChartFactory.getCubeLineChartView(context, buildBarDataset(titles, values), renderer, 0.5f);return ChartFactory.getCubicLineChartIntent(context, buildBarDataset(titles, values), renderer,0.5f);}
}


执行效果



作者 : 韩曙亮

转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38420197


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/59550.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android之各种图形绘制

Android中绘制图片或形状是我们常遇到的事情&#xff0c;通过最近的学习与在网上学习的案例与资料那么我今天就总结一下android中绘制用到的一些类和方法&#xff0c;其中其中主要包括3个类Canvas&#xff0c;Paint&#xff0c;Bitmap&#xff0c;这里我做的不规范&#xff0c;…

Android 高级绘图

高级画布绘图 我们已经介绍了Canvas&#xff0c;在那里&#xff0c;已经学习了如何创建自己的View。在第7章中也使用了Canvas来为MapView标注覆盖。 画布(Canvas)是图形编程中一个很普通的概念&#xff0c;通常由三个基本的绘图组件组成&#xff1a; Canvas 提供了绘图方法…

Android——(仿微信聊天界面布局实例)

今天看郭霖《第一行代码》书上写了一个聊天窗体的小例子&#xff0c;自己就练习学了一下。加上一些自己的理解整理了一下。 1.第一步首先是制作9.patch图片&#xff0c;这个在android sdk 目录下tools文件&#xff0c;找到draw9patch.bat文件双击打开。这是一个专门用来处理安…

Android MPAndroidChart超漂亮图表框架

Android MPAndroidChart超漂亮图表框架 简介配置示例总结 Blog如有不对&#xff0c;敬请斧正 喜欢Android的可以关注我&#xff0c;日常更新Android干货简介 MPAndroidChart是GitHub中大名鼎鼎的一个开源框架&#xff0c;可以快速制作开发中需要的图表&#xff0c;如:折线图、…

【安卓基础】03 实现简单聊天界面

编写一个简单的聊天界面&#xff0c;例子来自《第一行代码》。 1. 编写主界面 聊天界面使用 RecyclerView&#xff0c;简单来说是谷歌新增的控件&#xff0c;与 ListView 类似&#xff0c;但是功能更加强大。比如 ListView 只能纵向华东&#xff0c;但是 RecyclerView 可以设…

安卓 类微信界面实现

目录 1.引言 2.实现 1.写出顶部和底部的layout 2.主页面 3.写四个fragment用于显示不同的内容 4.写MainActivity中的代码 3.总结 1.引言 这是我第一次接触安卓的开发&#xff0c;因为之前学过c#和java&#xff0c;感觉使用AS开发就像使用java在写winform&#xff0c;同样…

安卓开发之设计微信界面

一、功能需求 完成一个类似微信页面的布局&#xff0c;要求&#xff1a; 页面最上方是标题居中页面中间界面显示内容&#xff0c;内容随下方栏的选择而切换页面最下方有四个按钮点击按钮后&#xff0c;按钮图标会变换颜色&#xff0c;且显示框变换内容 项目大致框架如下&…

干货!几招教你降低论文重复率!!

相信大家已经开始为毕业论文奋战了&#xff0c;甚至有的学校已经答辩结束了。今天&#xff0c;小编就说说史上最奇葩智能系统——知网论文检测系统&#xff0c;并且告诉大家躲避查重的几个大招。 各个学校对所谓论文原创度的标准要求不同&#xff0c;碰到要求重复率在30%或20%以…

最简单的 6 种防止数据重复提交的方法!(干货)

有位朋友&#xff0c;某天突然问磊哥&#xff1a;在 Java 中&#xff0c;防止重复提交最简单的方案是什么&#xff1f; 这句话中包含了两个关键信息&#xff0c;第一&#xff1a;防止重复提交&#xff1b;第二&#xff1a;最简单。 于是磊哥问他&#xff0c;是单机环境还是分布…

如何降重计算机SCI论文的重复率? - 易智编译EaseEditing

介绍几种降重方法&#xff1a; 1“中英中”互换法 用翻译软件先翻译成英文&#xff0c; 再翻译回中文&#xff0c;之后手工修改润色一下&#xff0c; 这样换了一种表达句式&#xff0c;但愿文意思没有改变。 值得一提的是&#xff0c;现在中英文互译软件已经非常强大了&…

对文本文件中出现的词进行次数统计

主要涉及读取文本文件、统计词出现的数目、排序、隐藏函数lambda。 随便从网页复制一篇文章保存成“train.txt”&#xff0c;采用以下代码读取txt文件&#xff1a; def load_stop_words(file "stopwords.txt"):with open(file,"r",encoding"utf-8&…

最简单的6种防止数据重复提交的方法!(干货)

有位朋友&#xff0c;某天突然问磊哥&#xff1a;在 Java 中&#xff0c;防止重复提交最简单的方案是什么&#xff1f; 这句话中包含了两个关键信息&#xff0c;第一&#xff1a;防止重复提交&#xff1b;第二&#xff1a;最简单。 于是磊哥问他&#xff0c;是单机环境还是分布…

马斯克成立人工智能公司X.AI:对抗ChatGPT 已买1万个GPU

雷递网 雷建平 4月15日 根据内华达州的一份文件&#xff0c;特斯拉CEO埃隆马斯克 (Elon Musk) 已经成立了一家名为X.AI Corp的新人工智能公司。马斯克为X.AI Corp的唯一董事&#xff0c;而贾里德伯查尔&#xff0c;马斯克家族办公室的董事则是其秘书。 X.AI已允许出售这家私人持…

十大网络安全上市公司分析,让我们重点聊聊F5

网络安全上市厂商业务广泛分布于网络安全硬件、软件&#xff0c;网络安全服务等板块&#xff0c;总体来看&#xff0c;十大网络安全上市公司的竞争可谓是如火如荼。今天让我们把目光集中在F5&#xff0c;这个能为我们所有人创造更安全的数字世界的企业&#xff0c;在应用及API交…

基于blinker的 microPython 小爱同学

官方没有基于esp8266 esp32的microPython 的SDK 翻了 c源码 照葫芦画瓢画出了 这个 100行左右 里面有个设置设备类型的链接 需要手动设置一次 然后就可以进米家绑定其他设备同步到小爱同学啦 比官方的几百K缩小了很多 不过在官方源码翻协议倒是翻了一晚上。 https://download…

集美大学及集美大学诚毅学院的课表导入小爱同学

引言 由于学校教务系统在使用上存在一定的不便&#xff0c;无法在手机上简单地查看课程表&#xff0c;往往都需要通过截图的形式在手机上保存以供上课过程中查阅。本教程将介绍一种将集美大学及集美大学诚毅学院的课程表导入到小爱同学中的方法。 选择小爱课程表的理由是觉得市…

基于微信小程序的网上订餐系统 报告+任务书+开题报告+文献综述+中期PPT+外文翻译及原文+PPT+项目源码及数据库文件

摘要 随着微信小程序的飞速发展&#xff0c;很多系统随之兴起&#xff0c;微信已经是我们生活中的一部分&#xff0c;可不单单是人们用于沟通聊天的工具。还有很多公告平台、小程序也随之发展。大部分公众平台都只起到了一个信息消息的推送或者浏览的作用&#xff0c;而小程序的…

蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表使用说明

文章目录 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表详细教学视频演示一、自我介绍二、使用说明1.使用条件2.读入数据 总结and已知问题 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小爱同学课程表 蚌埠学院教务系统自动导入课程表到小米/Redmi手机小…

基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT)

毕业设计&#xff08;论文&#xff09; &#xff08; 20 届&#xff09; 论文&#xff08;设计&#xff09;题目 基于Javamail的邮件收发系统 作 者 二级学院、专业 班 级 指导教师&#xff08;职称&#xff09; 论 文 字 数 论文完成时间 20年月日 基于JavaMail的邮件…

电脑打不开网页,能ping通,能上QQ,解决办法。

方法一 修改网络配置 因为网络配置不正确无法访问外网的情况。 解决办法&#xff1a; WINR —>在运行里面输入cmd 输入 ipconfig 查看网络配置是否正确 如果不正确&#xff0c;右击网络–>属性–>更改适配器设置–>右击你现在连接的外网的–>属性–>双击…