achartengine android 图表

本文介绍了一款基于AChartEngine库的Android应用,该应用用于展示股票走势。通过使用AChartEngine,作者实现了上证指数24小时走势图,并分享了具体代码及布局文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一个关于股票的软件(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,等有有时间在把代码和我找到的相关函数贴上来吧……

/** * 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 Main 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); } }

在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 中写入

<?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>

转载自:http://hi.baidu.com/lupingloveyou/blog/item/3cf7d303a34124fb09fa9369.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值