前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发笔记(一百零二)统计图表

Android开发笔记(一百零二)统计图表

作者头像
aqi00
发布2019-01-18 14:03:03
1.4K0
发布2019-01-18 14:03:03
举报
文章被收录于专栏:老欧说安卓老欧说安卓

AChartEngine

AChartEngine是Android平台上的图表绘制引擎,提供了包括折线图、柱状图、饼状图等图表显示。它的官网地址是http://achartengine.org/,源码下载页面是http://code.google.com/p/achartengine/,当然谷歌失火,殃及AChartEngine,大陆访问不了这个下载页面,若要下载最新版的jar包可前往下面这个地址: http://repository-achartengine.forge.cloudbees.com/snapshot/org/achartengine/achartengine/ 使用AChartEngine要在代码中设置许多属性,无法一一说明,下面还是直接上个代码例子(成绩统计图):

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
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 com.example.mastersec.R;

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

public class ScoreChart extends AbstractDemoChart {
	
	@Override
	public Intent execute(Context context) {
		String[] titles = new String[] { "成绩分布曲线" };
		List<double[]> x = new ArrayList<double[]>();
		for (int i = 0; i < titles.length; i++) {
			x.add(new double[] { 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100 });
		}
		List<double[]> values = new ArrayList<double[]>();
		values.add(new double[] { 2, 0, 1, 2, 3, 3, 4, 3, 1, 3, 4, 5, 3, 7, 8, 5, 3, 2, 0, 0 });
		int[] colors = new int[] { 0xff2200 - 16777216 };

		PointStyle[] styles = new PointStyle[] { PointStyle.POINT };
		XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(1);
		setRenderer(renderer, colors, styles);
		int length = renderer.getSeriesRendererCount();
		for (int i = 0; i < length; i++) {
			XYSeriesRenderer r = (XYSeriesRenderer) renderer.getSeriesRendererAt(i);
			r.setLineWidth(1f);
		}
		renderer.setChartTitle("分布曲线"); // 图表标题
		renderer.setXTitle("分数段"); //  // X轴标题
		renderer.setYTitle("人数"); // Y轴标题
		renderer.setXAxisMin(0); // X轴最小标尺
		renderer.setXAxisMax(120); // X轴最大标尺
		renderer.setYAxisMin(0); // Y轴最小标尺
		renderer.setYAxisMax(11); // Y轴最大标尺
		renderer.setXLabels(0); // X轴标记数
		renderer.setYLabels(11); // Y轴标记数
		renderer.setAxesColor(Color.BLACK); // 坐标轴颜色
		renderer.setLabelsColor(Color.BLACK); // 主标题、X轴标题、Y轴标题、annoation颜色

		renderer.addXTextLabel(0, "0"); // 添加X轴标记文本
		renderer.addXTextLabel(10, "10");
		renderer.addXTextLabel(20, "20");
		renderer.addXTextLabel(30, "30");
		renderer.addXTextLabel(40, "40");
		renderer.addXTextLabel(50, "50");
		renderer.addXTextLabel(60, "60");
		renderer.addXTextLabel(70, "70");
		renderer.addXTextLabel(80, "80");
		renderer.addXTextLabel(90, "90");
		renderer.addXTextLabel(100, "100");
		renderer.addXTextLabel(115, "分数");
		renderer.addYTextLabel(11, "人数"); // 添加Y轴标记文本

		renderer.setAxisTitleTextSize(20); // 坐标轴标题字体大小:16
		renderer.setChartTitleTextSize(context.getResources().getDimension(
				R.dimen.chart_titile_size)); // 图表标题字体大小:20
		renderer.setLabelsTextSize(context.getResources().getDimension(
				R.dimen.chart_label_size)); // 轴标签字体大小:15
		renderer.setPointSize(35f); // 点的大小
		renderer.setLegendHeight((int) context.getResources().getDimension(
				R.dimen.chart_legend_height)); // 底部高度
		renderer.setLegendTextSize(context.getResources().getDimension(
				R.dimen.chart_legend_size)); // 底部文字大小,包括annoation大小
		renderer.setMargins(new int[] {
				(int) context.getResources().getDimension(
						R.dimen.chart_top_margin),
				(int) context.getResources().getDimension(
						R.dimen.chart_left_margin),
				(int) context.getResources().getDimension(
						R.dimen.chart_bottom_margin),
				(int) context.getResources().getDimension(
						R.dimen.chart_right_margin) }); // 上间距,左间距,下间距,右间距
		renderer.setGridColor(Color.rgb(100, 100, 100)); // 
		renderer.setShowGridX(true); // 是否显示X轴网格
		renderer.setShowGridY(true); // 是否显示Y轴网格
		renderer.setXLabelsAlign(Align.LEFT); // X轴标记的对齐方式
		renderer.setYLabelsAlign(Align.RIGHT); // Y轴标记的对齐方式
		renderer.setZoomButtonsVisible(false); // 是否显示缩放按钮
		renderer.setPanEnabled(false); // 是否允许拖动
		renderer.setMarginsColor(Color.rgb(200, 255, 200)); // 空白处颜色
		renderer.setApplyBackgroundColor(false); // 是否应用背景色
		renderer.setXLabelsColor(Color.rgb(0, 100, 255)); // X轴标记颜色
		renderer.setYLabelsColor(0, Color.rgb(255, 30, 30)); // Y轴标记颜色

		XYMultipleSeriesDataset dataset = buildDataset(titles, x, values);
		XYSeries series = dataset.getSeriesAt(0);
		int offset = 4;
		series.addAnnotation("●", 72 - offset, 7 + (8 - 7 + 1) / 5 * 2); // 在指定位置添加注解

		Intent intent = ChartFactory.getCubicLineChartIntent(context, dataset,
				renderer, 0.3f,
				context.getResources().getString(R.string.app_name));
		return intent;
	}

	@Override
	public String getName() {
		return null;
	}

	@Override
	public String getDesc() {
		return null;
	}
}

调用图表页面的代码如下:

代码语言:javascript
复制
		ScoreChart scoreChart = new ScoreChart();
		Intent intent = scoreChart.execute(mContext);
		mContext.startActivity(intent);

下面是示例代码的图表截图:

MPAndroidChart

MPAndroidChart是又一款国外的图表绘制控件库,除了基本的图表显示,还支持图表展开的动画效果。不过正因为提供了动画效果,所以为了兼容低版本的Android系统,工程中还需引用nineoldandroids的jar包。即我们的工程要同时加入nineoldandroids-2.4.0.jar和mpandroidchartlibrary-2.2.4.1.jar。 MPAndroidChart源码在github的地址是https://github.com/PhilJay/MPAndroidChart,具体用法可参考github上的demo,这里不再赘述。下面是MPAndroidChart的一个柱状图动画截图:

XCL-Charts

XCL-Charts是国人写的图表控件库,它的图表比较符合我们的习惯,也支持动画效果。XCL-Charts源码在github的地址是https://github.com/xcltapestry/XCL-Charts,jar包名为xcl-charts-2.4.jar,具体用法可参考github上的demo。下面是XCL-Charts的一个饼状图截图:

点此查看Android开发笔记的完整目录

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AChartEngine
  • MPAndroidChart
  • XCL-Charts
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档