- 浏览: 153078 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
xjk112:
2015-05-08 13:21
我奋斗了18年才和你坐在一起喝咖啡[转] -
sandy_vv:
给达内广告,收费 ?
Java 利用url下载MP3保存到本地 -
78945612:
哥们
这个对于初学者怎么整呢?
android 定时关机 -
cn23snyga:
请教贵博,用ACE 绘制出的图表,可以捕捉到点击事件的坐标值 ...
使用achartengine开发曲线图相关的Android应用程序(zhuan) -
qi19901212:
楼主你好,我开发的achartengine放在 scrollv ...
Android开发工具之AChartEngine
最近在做一个关于股票的软件(for Android),在软件中需要实现一个 股票走势图的功能,本来想到用 最基础的画板和画笔去实现来着,在设计的过程中发现好复杂,需要抽象出很多东西,而且代码量也不小(相对之后提到的来说),我是一个真真正正的懒人,实在不乐意动手写那么多东西,而且还会有很多不可预见性的风险,于是 上网查了一些资料,跟朋友咨询了一下,发现了它(AChartEngine):
AChartEngine is a charting library for Android applications. It currently supports the following chart types:
line chart
area chart
scatter chart
time chart
bar chart
pie chart
bubble chart
doughnut chart
range (high-low) bar chart
dial chart / gauge
怎么样?是不是一个很强大呢?当然是针对Android来说的,如果对PC和Web来说这都是皮毛…^_^
我先吃饭…一会接着写!
呵呵!这么晚了?忘了还有文章没写完…先上图吧,这是我参考官方文档写的一个Demo,等有有时间在把代码和我找到的相关函数贴上来吧……
虽然很丑,但这是我的辛辛苦苦的劳动成果呢…呵呵,没想到我现在看英文文档都能写代码了,哈!有进步哦
第二天……
开始贴代码:
首先引入jar包,就不j细说了……
---------------------------StockChartBuilder.java ------------------------------------
/**
* ClassName : </br>
* <p>
* 功能描述:股票走势图
* </p>
* History</br>
* Create User: LuPing</br>
* Create Date: 2011-5-15 下午07:10:54</br>
* Update User:</br>
* Update Date:</br>
*/
public class StockChartBuilder extends Activity {
public static final String TYPE = "type";
private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();
private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
private XYSeries mCurrentSeries;
private XYSeriesRenderer mCurrentRenderer;
private String mDateFormat;
private GraphicalView mChartView;
/**
* 提取保存数据 恢复Activity状态
*/
@Override
protected void onRestoreInstanceState(Bundle savedState) {
super.onRestoreInstanceState(savedState);
mDataset = (XYMultipleSeriesDataset) savedState
.getSerializable("dataset");
mRenderer = (XYMultipleSeriesRenderer) savedState
.getSerializable("renderer");
mCurrentSeries = (XYSeries) savedState
.getSerializable("current_series");
mCurrentRenderer = (XYSeriesRenderer) savedState
.getSerializable("current_renderer");
mDateFormat = savedState.getString("date_format");
}
/**
* 在Activity销毁前 保存数据状态
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("dataset", mDataset);
outState.putSerializable("renderer", mRenderer);
outState.putSerializable("current_series", mCurrentSeries);
outState.putSerializable("current_renderer", mCurrentRenderer);
outState.putString("date_format", mDateFormat);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xy_chart);
// 创建 系列(画笔、渲染)
String seriesTitle = "上证指数";
XYSeries series = new XYSeries(seriesTitle);
mDataset.addSeries(series);
mCurrentSeries = series;
XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
// 设置seriesRenderer风格
seriesRenderer.setColor(Color.BLUE); // 画笔颜色
seriesRenderer.setFillBelowLine(true); // 确定填充
seriesRenderer.setFillBelowLineColor(Color.RED); //填充颜色
// seriesRenderer.setFillPoints(true); // 不知道干什么用的
seriesRenderer.setPointStyle(PointStyle.POINT); //设置画笔风格
seriesRenderer.setLineWidth(3.0f); // 设置画笔宽度
mRenderer.addSeriesRenderer(seriesRenderer);
mRenderer.setYAxisMin(0d); // 设置Y维度最小值
mRenderer.setYAxisMax(120d); // 设置Y维度最大值
mRenderer.setXAxisMax(24d);// 设置X维度最大值
mRenderer.setShowGrid(true); // 设置背景格子
mRenderer.setXLabels(24); // 设置X坐标分成24份
mRenderer.setChartTitle("上证指数-24小时走势图");
mCurrentRenderer = seriesRenderer;
// 数据绘制 To Do
double x = 0;
double y = 0;
// 获取 (x,y) 数据集
int[][] xyValues = getValues();
for (int i = 0; i < xyValues.length; i++) {
x = xyValues[i][0];
y = xyValues[i][1];
mCurrentSeries.add(x, y);
}
}
/**
* 在 onResume 里进行绘制 在横屏切换时自动调用
*/
@Override
protected void onResume() {
super.onResume();
if (mChartView == null) {
LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
mChartView = ChartFactory.getLineChartView(this, mDataset,
mRenderer);
layout.addView(mChartView, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
} else {
mChartView.setBackgroundResource(R.id.chart);
mChartView.repaint();
}
}
/**
* 数据入口
*
* @return x、y 坐标集
*/
private int[][] getValues() {
int[][] xyValues = { { 0, 88 }, { 1, 79 }, { 2, 75 }, { 3, 71 },
{ 4, 90 }, { 5, 88 }, { 6, 66 }, { 7, 65 }, { 8, 50 },
{ 9, 78 }, { 10, 67 }, { 11, 77 }, { 12, 79 }, { 13, 85 },
{ 14, 89 }, { 15, 93 }, { 16, 95 }, { 17, 99 }, { 18, 66 },
{ 19, 55 }, { 20, 44 } };
return xyValues;
}
/*
* (non-Javadoc)
*
* @see android.app.Activity#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
}
------------------------------ xy_chart.xml (Layout) -----------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="@string/add_values" />
<TableLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TableLayout>
<LinearLayout android:id="@+id/chart" android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" />
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content" >
</LinearLayout>
</LinearLayout>
-------------------------------- AndroidManifest.xml -------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cn.eagle"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=". StockChartBuilder "
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="org.achartengine.GraphicalActivity" />
</application>
</manifest>
---------------------------------- strings.xml (values)----------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, ChartTest!</string>
<string name="app_name">走势图(示例)</string>
<string name="add_values">输入值生成走势图</string>
<string name="x">X</string>
<string name="y">Y</string>
<string name="add">Add</string>
<string name="new_series">New series</string>
</resources>
打完收工^_^ ……
AChartEngine is a charting library for Android applications. It currently supports the following chart types:
line chart
area chart
scatter chart
time chart
bar chart
pie chart
bubble chart
doughnut chart
range (high-low) bar chart
dial chart / gauge
怎么样?是不是一个很强大呢?当然是针对Android来说的,如果对PC和Web来说这都是皮毛…^_^
我先吃饭…一会接着写!
呵呵!这么晚了?忘了还有文章没写完…先上图吧,这是我参考官方文档写的一个Demo,等有有时间在把代码和我找到的相关函数贴上来吧……
虽然很丑,但这是我的辛辛苦苦的劳动成果呢…呵呵,没想到我现在看英文文档都能写代码了,哈!有进步哦
第二天……
开始贴代码:
首先引入jar包,就不j细说了……
---------------------------StockChartBuilder.java ------------------------------------
/**
* ClassName : </br>
* <p>
* 功能描述:股票走势图
* </p>
* History</br>
* Create User: LuPing</br>
* Create Date: 2011-5-15 下午07:10:54</br>
* Update User:</br>
* Update Date:</br>
*/
public class StockChartBuilder extends Activity {
public static final String TYPE = "type";
private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();
private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
private XYSeries mCurrentSeries;
private XYSeriesRenderer mCurrentRenderer;
private String mDateFormat;
private GraphicalView mChartView;
/**
* 提取保存数据 恢复Activity状态
*/
@Override
protected void onRestoreInstanceState(Bundle savedState) {
super.onRestoreInstanceState(savedState);
mDataset = (XYMultipleSeriesDataset) savedState
.getSerializable("dataset");
mRenderer = (XYMultipleSeriesRenderer) savedState
.getSerializable("renderer");
mCurrentSeries = (XYSeries) savedState
.getSerializable("current_series");
mCurrentRenderer = (XYSeriesRenderer) savedState
.getSerializable("current_renderer");
mDateFormat = savedState.getString("date_format");
}
/**
* 在Activity销毁前 保存数据状态
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("dataset", mDataset);
outState.putSerializable("renderer", mRenderer);
outState.putSerializable("current_series", mCurrentSeries);
outState.putSerializable("current_renderer", mCurrentRenderer);
outState.putString("date_format", mDateFormat);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xy_chart);
// 创建 系列(画笔、渲染)
String seriesTitle = "上证指数";
XYSeries series = new XYSeries(seriesTitle);
mDataset.addSeries(series);
mCurrentSeries = series;
XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
// 设置seriesRenderer风格
seriesRenderer.setColor(Color.BLUE); // 画笔颜色
seriesRenderer.setFillBelowLine(true); // 确定填充
seriesRenderer.setFillBelowLineColor(Color.RED); //填充颜色
// seriesRenderer.setFillPoints(true); // 不知道干什么用的
seriesRenderer.setPointStyle(PointStyle.POINT); //设置画笔风格
seriesRenderer.setLineWidth(3.0f); // 设置画笔宽度
mRenderer.addSeriesRenderer(seriesRenderer);
mRenderer.setYAxisMin(0d); // 设置Y维度最小值
mRenderer.setYAxisMax(120d); // 设置Y维度最大值
mRenderer.setXAxisMax(24d);// 设置X维度最大值
mRenderer.setShowGrid(true); // 设置背景格子
mRenderer.setXLabels(24); // 设置X坐标分成24份
mRenderer.setChartTitle("上证指数-24小时走势图");
mCurrentRenderer = seriesRenderer;
// 数据绘制 To Do
double x = 0;
double y = 0;
// 获取 (x,y) 数据集
int[][] xyValues = getValues();
for (int i = 0; i < xyValues.length; i++) {
x = xyValues[i][0];
y = xyValues[i][1];
mCurrentSeries.add(x, y);
}
}
/**
* 在 onResume 里进行绘制 在横屏切换时自动调用
*/
@Override
protected void onResume() {
super.onResume();
if (mChartView == null) {
LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
mChartView = ChartFactory.getLineChartView(this, mDataset,
mRenderer);
layout.addView(mChartView, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
} else {
mChartView.setBackgroundResource(R.id.chart);
mChartView.repaint();
}
}
/**
* 数据入口
*
* @return x、y 坐标集
*/
private int[][] getValues() {
int[][] xyValues = { { 0, 88 }, { 1, 79 }, { 2, 75 }, { 3, 71 },
{ 4, 90 }, { 5, 88 }, { 6, 66 }, { 7, 65 }, { 8, 50 },
{ 9, 78 }, { 10, 67 }, { 11, 77 }, { 12, 79 }, { 13, 85 },
{ 14, 89 }, { 15, 93 }, { 16, 95 }, { 17, 99 }, { 18, 66 },
{ 19, 55 }, { 20, 44 } };
return xyValues;
}
/*
* (non-Javadoc)
*
* @see android.app.Activity#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
}
------------------------------ xy_chart.xml (Layout) -----------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="@string/add_values" />
<TableLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TableLayout>
<LinearLayout android:id="@+id/chart" android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" />
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content" >
</LinearLayout>
</LinearLayout>
-------------------------------- AndroidManifest.xml -------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cn.eagle"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=". StockChartBuilder "
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="org.achartengine.GraphicalActivity" />
</application>
</manifest>
---------------------------------- strings.xml (values)----------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, ChartTest!</string>
<string name="app_name">走势图(示例)</string>
<string name="add_values">输入值生成走势图</string>
<string name="x">X</string>
<string name="y">Y</string>
<string name="add">Add</string>
<string name="new_series">New series</string>
</resources>
打完收工^_^ ……
评论
2 楼
qi19901212
2011-12-22
楼主你好,我开发的achartengine放在 scrollview的linelayout里,我向上滑动,图形伸缩怎么办?
1 楼
sessionkevin
2011-10-31
楼主你好,试过timechart么,我发现里面X轴的时间和Y轴的时间根本就对不起,求解,QQ104145485
发表评论
-
Android开发之Tools
2011-10-02 00:19 948AChartEngine is a charting libr ... -
使用achartengine开发曲线图相关的Android应用程序(zhuan)
2011-10-02 00:10 3030应用程序的开发过程中,经常会遇到和曲线图打交道的情况,相比自己 ... -
或许您还不知道的八款开源Android游戏引擎
2011-09-29 12:38 808很多初学Android游戏开发 ... -
android 事件处理(转)
2011-09-15 12:14 1126android中的事件类型分为按键事件和屏幕触摸事件,Touc ... -
android paint设置字体 中文字体 楷体 和自动换行方法(zhuan)
2011-09-14 16:19 3881Bitmap bmp = BitmapFactory.deco ... -
Android Canvas类介绍(zhuan)
2011-09-14 14:57 982当我们调整好画笔之后,现在需要绘制到画布上,这就得用Can ... -
Android Canvas类介绍(zhuan)
2011-09-14 14:56 0当我们调整好画笔之后,现在需要绘制到画布上,这就得用Can ... -
Android OpenGL之生成FloatBuffer
2011-09-06 08:56 1527public FloatBuffer getFloatBuff ... -
Activity之间的跳转(A-B-A)
2011-09-05 12:29 1065Activity A 中: Intent intent ... -
Android OpenGL相关
2011-09-02 15:46 7460x10000是出于OPENGL前期内存节约的考虑, 以INT ... -
Android 返回键
2011-09-01 17:11 1101@Override public boolean onK ... -
android selector(zhuan)
2011-08-30 10:06 586<?xml version="1.0" ... -
android 定时关机
2011-08-29 10:19 1314Calendar calendar = Calendar.ge ... -
android 相关2
2011-08-25 12:31 805AndroidManifest.xml的activity里加a ... -
Android ListView刷新 (Handler/Service)
2011-08-03 21:40 2152本文转自http://blog.sina.com.cn/s/b ... -
Android 中的ListView内容刷新问题(转)
2011-08-03 21:22 1226本文转自http://www.linuxidc.com/Lin ... -
android listview
2011-08-03 21:21 883Android 中的ListView内容刷新 对于ListV ... -
android相关
2011-07-21 12:48 828android:screenOrientation=" ... -
Android中JNI程序的编写(zhuan)
2011-07-15 18:48 993zhuan(http://luco1130.blog.163. ... -
Android_Handler,Looper,Message深入分析
2011-04-07 18:49 1541在网上有许多资料对这三者关系的分析,但都比较笼统不够细 ...
相关推荐
在Android开发中,数据可视化是十分重要的,AChartEngine是一个流行的开源库,它为开发者提供了在Android应用中绘制各种图表的能力,包括折线图、饼图、柱状图等。这篇博客“Android学习之AChartEngine折线图”将...
AChartEngine为Android开发者提供了一个便捷的工具,用于创建美观且功能丰富的图表。无论你是开发商业应用还是个人项目,它都能帮助你更好地展示数据,提升用户体验。通过熟练掌握AChartEngine,你可以快速地将数据...
在Android应用开发中,数据可视化是一项重要的功能,能够帮助用户直观地理解复杂的数据信息。aChartEngine是一个强大的开源库,专门用于在Android平台上创建各种类型的图表,包括折线图、柱状图、饼图等。本文将深入...
在Android开发中,AChartEngine是一个非常实用的图表库,它允许开发者轻松地在应用程序中创建各种图表,如线图、柱状图、饼图以及本文提到的仪表盘。这个"Android例子源码使用AChartEngine的仪表盘"示例项目,旨在...
总之,AChartEngine是Android开发者的强大工具,它简化了数据可视化的实现过程,提高了开发效率,同时提供了丰富的定制选项,确保了图表的专业性和美观性。通过深入理解和实践,开发者可以利用AChartEngine打造出色...
在Android开发中,有时我们需要展示数据,而图表是一种直观且有效的可视化方式。AChartEngine是一个开源库,专门用于在Android应用程序中创建各种类型的图表,如柱状图、折线图、饼图等。本篇文章将重点讲解如何使用...
总之,AChartEngine 1.0.0是Android开发者的强大工具,它简化了报表的创建过程,提供了丰富的图表类型和自定义选项,帮助开发者快速构建具有专业可视化效果的应用程序。通过理解和掌握AChartEngine的使用,你可以...
总结来说,AChartEngine 0.1.7.0是Android开发者的一个强大工具,可以帮助他们快速实现数据可视化,无论是简单的统计图表还是复杂的金融股表图,都能通过其灵活的API进行构建。通过提供的示例代码,开发者可以迅速...
在Android应用开发中,视觉表现是吸引用户的重要手段之一,而图表的使用则能直观地展示数据,帮助用户更好地理解和分析信息。AChartEngine就是这样一款强大的开源库,专为Android平台提供各种图表绘制功能。本文将...
AChartEngine是一个强大...总的来说,AChartEngine是一个强大的工具,对于需要在Android应用中展示数据的开发者来说非常实用。通过灵活的配置和丰富的图表类型,它可以帮助开发者快速构建出专业级别的数据可视化界面。
总之,Achartengine是一个功能丰富的图表库,为Android开发者提供了方便的工具来展示数据。通过理解其基本结构,如`Dataset`、`Renderer`和`ChartView`,以及它们之间的关系,你可以有效地利用Achartengine创建美观...
在Android应用开发中,AChartEngine提供了一种简单且灵活的方式来展示数据,尤其适用于数据分析、可视化报告或者监控应用。 标题"Achartengine0.6-Demo"表明这是一个关于AChartEngine 0.6版本的示例项目,它展示了...
在Android开发中,有时我们需要为应用程序添加数据可视化功能,如绘制图表、曲线等。`ACHartEngine`是一个非常实用的库,它为Android开发者提供了一种简单易用的方式来实现这些需求。这个库已经被广泛地使用,并且在...
综上所述,AChartEngine为Android开发者提供了便利的图表开发工具,能够轻松地在应用中集成多种类型的图表,并通过自定义样式和交互功能,实现数据的直观展示。无论是初学者还是经验丰富的开发者,都能从中受益。
AChartEngine是为Android应用而设计的绘图工具库。可用于绘制多种图表,目前该绘图工具库的最新最新版本的是achartengine-1.1.0.jar。ChartEngine支持的图表类型:折线图、区域图、散点图、时间图、柱状图、饼状图、...
总结,achartengine-1.2.0.jar为Android开发者提供了一个简单易用的图表绘制工具,通过其丰富的功能和高度定制性,能够帮助开发者快速实现数据可视化的功能,提升应用的用户体验。无论是初学者还是经验丰富的开发者...
总的来说,`ACHartEngine`是一个强大且灵活的工具,可以帮助开发者轻松地在Android应用中实现专业级别的数据可视化。时间轴折线图是一个常见的需求,通过上述方法,我们可以有效地利用`ACHartEngine`满足这种需求。