`
我是城
  • 浏览: 15658 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Android报表控件achartengine介绍(二)

阅读更多

Android报achartengine再详细的介绍可以查看

 http://blog.csdn.net/lk_blog/article/details/7642751

 

 

在achartengine中两种创建报表的方式

 1,是在Activity中直接创建

 2   是在Activity的view控件中创建(这种方式更灵活),使用achartengine中GraphicalView控件可以响应点击事件和动态数据的更新。现在只介绍在GraphicalView中创建响应点击事件

 

 

 

 

 

 

 

package com.sinosoft.chartdemo;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.SeriesSelection;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import org.achartengine.tools.PanListener;
import org.achartengine.tools.ZoomEvent;
import org.achartengine.tools.ZoomListener;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.Toast;

/**
 * 嵌入Acitivity中的折线图
 * 
 * @author jianfan
 * 
 */
public class LineChartActivity extends BasicActivity {

	private XYMultipleSeriesDataset mDataset;
	private XYMultipleSeriesRenderer mRenderer;
	private XYSeries mCurrentSeries;
	private XYSeriesRenderer mCurrentRenderer;
	private GraphicalView mChartView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		Log.i("onCreate", "onCreate");
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		Init();

	}

	/********
	 * 初始化数据DataSet和Renderer
	 *****/
	private void Init() {
		InitRenderer();
		InitDataSet();
	}

	/***********
	 * 初始化 XYMultipleSeriesRenderer
	 **********/
	private void InitRenderer() {

		// 每个序列的颜色设置
		int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN, Color.YELLOW };

		// 每个序列中点的形状设置
		PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND, PointStyle.TRIANGLE, PointStyle.SQUARE };
		// 调用AbstractChart中的方法设置renderer.
		// 设置线条的颜色和点的形状
		mRenderer = buildRenderer(colors, styles);
		int length = mRenderer.getSeriesRendererCount();

		// 设置图上线上的点为实心
		for (int i = 0; i < length; i++) {
			((XYSeriesRenderer) mRenderer.getSeriesRendererAt(i)).setFillPoints(true);
		}
		// 调用AbstractChart中的方法设置图表的renderer属性.
		setChartSettings(mRenderer, "平均温度", "月份", "温度", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);
		// 设置x轴显示12个点,根据setChartSettings的最大值和最小值自动计算点的间隔
		mRenderer.setXLabels(12);
		// 设置y轴显示10个点,根据setChartSettings的最大值和最小值自动计算点的间隔
		mRenderer.setYLabels(10);

		mRenderer.setBackgroundColor(Color.BLACK);// 设置背景颜色
		mRenderer.setApplyBackgroundColor(true); // 使背景色生效

		mRenderer.setShowGrid(true);// 是否显示网格
		mRenderer.setXLabelsAlign(Align.RIGHT);// 刻度线与刻度标注之间的相对位置关系
		mRenderer.setYLabelsAlign(Align.RIGHT);// 刻度线与刻度标注之间的相对位置关系
		mRenderer.setZoomButtonsVisible(true);// 是否显示放大缩小按钮
		mRenderer.setPanLimits(new double[] { -10, 20, -10, 40 }); // 设置拖动时X轴Y轴允许的最大值最小值.
		mRenderer.setZoomLimits(new double[] { -10, 20, -10, 40 });// 设置放大缩小时X轴Y轴允许的最大最小值.
	}

	/***********
	 * 初始化 XYMultipleSeriesDataset
	 **********/
	private void InitDataSet() {
		// 图例
		String[] titles = new String[] { "克里特岛", "科孚岛", "萨索斯岛", "斯基亚索斯岛" };
		// 每个序列中点的X坐标
		List<double[]> x = new ArrayList<double[]>();
		for (int i = 0; i < titles.length; i++) {
			x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
		}
		// titles数组中每个标识物对应的线条
		List<double[]> values = new ArrayList<double[]>();
		// 克里特岛的点的y坐标
		values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4, 26.1, 23.6, 20.3, 17.2, 13.9 });
		// 科孚岛的点的y坐标
		values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26, 23, 18, 14, 11 });
		// 萨索斯岛的点的y坐标
		values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24, 19, 15, 9, 6 });
		// 斯基亚索斯岛的点的y坐标
		values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 });
		mDataset = buildDataset(titles, x, values);
	}

	/*********************
	 * 当Activity失去焦点的时候用来保存数据的方法
	 */
	@Override
	protected void onSaveInstanceState(Bundle outState) {
		Log.i("onSaveInstanceState", "onSaveInstanceState");

		super.onSaveInstanceState(outState);
		outState.putSerializable("dataset", mDataset);

		outState.putSerializable("renderer", mRenderer);

		outState.putSerializable("current_series", mCurrentSeries);

		outState.putSerializable("current_renderer", mCurrentRenderer);

	}

	/*********************
	 * 当Activity重新获取焦点的时,取回之前保存的数据
	 */
	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		Log.i("onRestoreInstanceState", "onRestoreInstanceState");

		super.onRestoreInstanceState(savedInstanceState);

		mDataset = (XYMultipleSeriesDataset) savedInstanceState.getSerializable("dataset");

		mRenderer = (XYMultipleSeriesRenderer) savedInstanceState.getSerializable("renderer");

		mCurrentSeries = (XYSeries) savedInstanceState.getSerializable("current_series");

		mCurrentRenderer = (XYSeriesRenderer) savedInstanceState.getSerializable("current_renderer");

	}

	@Override
	protected void onResume() {
		Log.i("onResume", "onResume");
		super.onResume();
		if (mChartView == null) {
			LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
			mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);
			mRenderer.setClickEnabled(true);// 设置图表是否允许点击
			// 设置点的缓冲半径值(在某点附件点击时,多大范围内都算点击这个点)
			mRenderer.setSelectableBuffer(10);
			mChartView.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					// 这段代码处理点击一个点后,获得所点击的点在哪个序列中以及点的坐标.
					// -->start

					SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
					double[] xy = mChartView.toRealPoint(0);
					if (seriesSelection == null) {
						Toast.makeText(LineChartActivity.this, "没有图表元素被点击", Toast.LENGTH_SHORT).show();
					} else {
						Toast.makeText(LineChartActivity.this, "图表元素系列指数 " + seriesSelection.getSeriesIndex() + " 数据点指数 " + seriesSelection.getPointIndex() + " 被点击了" + " 最近点值X=" + seriesSelection.getXValue() + ", 最近点值Y=" + seriesSelection.getValue() + " 点击点值X=" + (float) xy[0] + ", 点击点值Y=" + (float) xy[1], Toast.LENGTH_SHORT).show();
					}
				}
				// -->end

			});
			mChartView.setOnLongClickListener(new View.OnLongClickListener() {
				@Override
				public boolean onLongClick(View v) {
					SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
					if (seriesSelection == null) {
						Toast.makeText(LineChartActivity.this, "No chart element was long pressed", Toast.LENGTH_SHORT);
						return false; // no chart element was long pressed, so
										// let something
						// else handle the event
					} else {
						Toast.makeText(LineChartActivity.this, "Chart element in series index " + seriesSelection.getSeriesIndex() + " data point index " + seriesSelection.getPointIndex() + " was long pressed", Toast.LENGTH_SHORT);
						return true; // the element was long pressed - the event
										// has been
						// handled
					}
				}
			});
			// 这段代码处理放大缩小
			// -->start
			mChartView.addZoomListener(new ZoomListener() {
				public void zoomApplied(ZoomEvent e) {
					String type = "out";
					if (e.isZoomIn()) {
						type = "in";
					}
					System.out.println("Zoom " + type + " rate " + e.getZoomRate());
				}

				public void zoomReset() {
					System.out.println("Reset");
				}
			}, true, true);
			// -->end
			// 设置拖动图表时后台打印出图表坐标的最大最小值.

			mChartView.addPanListener(new PanListener() {
				public void panApplied() {
					System.out.println("New X range=[" + mRenderer.getXAxisMin() + ", " + mRenderer.getXAxisMax() + "], Y range=[" + mRenderer.getYAxisMax() + ", " + mRenderer.getYAxisMax() + "]");
				}
			});
			layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
			boolean enabled = mDataset.getSeriesCount() > 0;

		} else {
			mChartView.repaint();

		}
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 ZSRTFAT 2013-11-05  
你好,我是个初学者,你写的代码相当好,请问下,能共享一份全部源码给我学习下吗,谢谢,我的邮箱是1217537568@qq.com

相关推荐

    Android报表库aChartEngine 横轴为时间曲线图表

    **Android报表库aChartEngine详解:打造时间曲线图表** 在Android应用开发中,数据可视化是一项重要的功能,能够帮助用户直观地理解复杂的数据信息。aChartEngine是一个强大的开源库,专门用于在Android平台上创建...

    Android报表库 AChartEngine 1.0.0 Demo

    **Android报表库AChartEngine 1.0.0详解** AChartEngine是一款强大的开源报表库,专为Android平台设计,允许开发者轻松地在应用程序中创建各种图表,如折线图、柱状图、饼图、散点图等。在1.0.0版本中,...

    android报表开发achartengine-1.0.0

    《Android报表开发与AChartEngine库详解》 在Android应用开发中,数据的可视化是至关重要的,它能够帮助用户更直观地理解复杂的信息。AChartEngine是一个强大的开源库,专门用于在Android平台上创建各种类型的图表...

    android 图表引擎AChartEngine

    **Android图表引擎AChartEngine详解** AChartEngine是一款强大的开源库,专为Android平台设计,用于创建各种类型的图表,如柱状图、线形图、饼图等。它提供了丰富的功能,使得开发者能够轻松地在应用程序中集成图表...

    android图形报表demo源码(AChartEngine)

    本文将深入探讨`AChartEngine`在Android图形报表中的应用,并通过提供的`AChartEngineTest`源码来解析其工作原理和使用方法。 首先,`AChartEngine`库提供了一个简洁的API,允许开发者快速构建动态和交互式的图表。...

    android报表 achartengine

    在Android应用开发中,报表和图表的展示是十分常见的需求,比如用于数据分析、用户反馈或者业务统计等。`achartengine`是一个强大的开源库,专为Android平台设计,提供了丰富的图表绘制功能,使得开发者能够轻松地在...

    Android学习之AChartEngine折线图

    在Android开发中,数据可视化是十分重要的,AChartEngine是一个流行的开源库,它为开发者提供了在Android应用中绘制各种图表的能力,包括折线图、饼图、柱状图等。这篇博客“Android学习之AChartEngine折线图”将...

    安卓图表报表相关-Android饼图控件1.2.rar

    本资源"安卓图表报表相关-Android饼图控件1.2.rar"包含了一个专用于在Android平台上绘制饼图的控件,版本为1.2。尽管无法确保每个组件都能直接运行,但它们提供了丰富的代码示例,适合开发者进行学习和参考,以实现...

    Android中使用AChartEngine 来绘图demo

    Android中使用AChartEngine 来绘图的demo,比google code上的demo简单易懂。相关文章请看: http://blog.csdn.net/suiyuansanren/article/details/19819437

    android 绘图引擎 achartengine

    本文将深入探讨`ACHARTENGINE`在Android绘图引擎中的应用及其核心特性。 `ACHARTENGINE`是一个用Java编写的库,专为Android平台设计,支持多种类型的图表,包括折线图(LineChart)、饼图(PieChart)、柱状图(Bar...

    Android画图之AChartEngine折线图

    `AChartEngine`是一个强大的库,它为Android开发者提供了一种简单的方式来创建各种类型的图表,包括折线图。本篇文章将深入探讨如何使用`AChartEngine`在Android应用中实现折线图的功能,并强调动态加载数据的实现。...

    android图表绘制工具achartengine-1.1.0

    android图表绘制工具,功能非常强大,几乎涵盖了所有的图表种类。 这是目前最新的版本:1.1.0 包含了3个文件: achartengine-1.1.0.jar, achartengine-1.1.0-demo-source.zip, achartengine-1.1.0-javadocs.zip ...

    android图表achartengine-1.1.0 Demo

    **Android图表库AChartEngine详解** AChartEngine是一款在Android平台上用于创建各种图表的强大框架,其1.1.0版本提供了丰富的图表类型和高度自定义的功能。这个框架使得开发者能够轻松地在Android应用中集成数据...

    achartengine1.0.0-1.2.0jar包

    AChartEngine是一个强大的开源图表库,专为Android平台设计,用于在应用程序中生成高质量的图形。这个库提供了多种图表类型,包括线图、散点图、条形图、饼图、甘特图等,适用于数据可视化的需求。标题提及的...

    Android使用AChartEngine制作动态心电图效果

    Android使用AChartEngine制作动态心电图效果

    Achartengine

    Achartengine是一个强大的开源图表库,专为Android平台设计,用于快速轻松地创建各种图表,如折线图、柱状图、饼图等。在Android应用开发中,它提供了丰富的功能,帮助开发者可视化数据,使得应用程序更加直观和交互...

    android折线图(AChartEngine和ichartjs)

    接下来,我们介绍iChartJS,这是一个基于JavaScript的图表库,主要用于Web端,但也可以在Android的WebView中使用。如果你需要在Android应用中展示交互式且视觉效果丰富的图表,iChartJS是一个不错的选择。以下是使用...

    Android报表打印研究.docx

    本文主要探讨了几个常用的Android报表控件,特别是AchartEngine,以及如何利用它们实现报表打印。 AchartEngine是一个强大的图表库,专为Android应用程序设计。它支持多种图表类型,包括线图、面积图、散点图、时间...

    AChartEngine1.1.0版本 好用的安卓报表制作库

    总的来说,AChartEngine 1.1.0版本为Android开发者提供了一个高效、灵活的报表制作工具。通过集成这个库,开发者可以创建出吸引人的、具有专业视觉效果的数据展示,适用于数据分析、业务报告、教学等多种场景。无论...

Global site tag (gtag.js) - Google Analytics