Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發環境 >> Android圖表開發庫AChartEngine

Android圖表開發庫AChartEngine

編輯:Android開發環境

       近來要開發一款支持Android系統的與股票有關的軟件,該軟件需要顯示股票走勢圖。開始想用最基礎的畫板和畫筆去實現,然而實際設計時發現比較復雜,需要抽象出很多對象,代碼量也很大,而且還存在很多難以預料的風險,所以就上網查了很多資料,希望能找到更好的實現方法。最後發現了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,後面我會把代碼和相關函數貼上來……

Android圖表開發庫AChartEngine

        雖然很丑,但這是我的辛辛苦苦的勞動成果呢…呵呵

        開始貼代碼:

        首先引入jar包,就不j細說了……

        StockChartBuilder.java:

Java代碼
  1. /**   
  2. * ClassName : </br>   
  3. * <p>   
  4. * 功能描述:股票走勢圖   
  5. * </p>   
  6. * History</br>   
  7. * Create User: LuPing</br>   
  8. * Create Date: 2011-5-15 下午07:10:54</br>   
  9. * Update User:</br>   
  10. * Update Date:</br>   
  11. */    
  12. public class StockChartBuilder extends Activity {    
  13. public static final String TYPE = "type";    
  14.   
  15. private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();    
  16.   
  17. private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();    
  18.   
  19. private XYSeries mCurrentSeries;    
  20.   
  21. private XYSeriesRenderer mCurrentRenderer;    
  22.   
  23. private String mDateFormat;    
  24.   
  25. private GraphicalView mChartView;    
  26.   
  27. /**   
  28. * 提取保存數據 恢復Activity狀態   
  29. */    
  30. @Override    
  31. protected void onRestoreInstanceState(Bundle savedState) {    
  32. super.onRestoreInstanceState(savedState);    
  33. mDataset = (XYMultipleSeriesDataset) savedState    
  34. .getSerializable("dataset");    
  35. mRenderer = (XYMultipleSeriesRenderer) savedState    
  36. .getSerializable("renderer");    
  37. mCurrentSeries = (XYSeries) savedState    
  38. .getSerializable("current_series");    
  39. mCurrentRenderer = (XYSeriesRenderer) savedState    
  40. .getSerializable("current_renderer");    
  41. mDateFormat = savedState.getString("date_format");    
  42. }    
  43.   
  44. /**   
  45. * 在Activity銷毀前 保存數據狀態   
  46. */    
  47. @Override    
  48. protected void onSaveInstanceState(Bundle outState) {    
  49. super.onSaveInstanceState(outState);    
  50. outState.putSerializable("dataset", mDataset);    
  51. outState.putSerializable("renderer", mRenderer);    
  52. outState.putSerializable("current_series", mCurrentSeries);    
  53. outState.putSerializable("current_renderer", mCurrentRenderer);    
  54. outState.putString("date_format", mDateFormat);    
  55. }    
  56.   
  57. @Override    
  58. protected void onCreate(Bundle savedInstanceState) {    
  59. super.onCreate(savedInstanceState);    
  60. setContentView(R.layout.xy_chart);    
  61.   
  62. // 創建 系列(畫筆、渲染)    
  63. String seriesTitle = "上證指數";    
  64. XYSeries series = new XYSeries(seriesTitle);    
  65. mDataset.addSeries(series);    
  66. mCurrentSeries = series;    
  67. XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();    
  68.   
  69. // 設置seriesRenderer風格    
  70. seriesRenderer.setColor(Color.BLUE); // 畫筆顏色    
  71. seriesRenderer.setFillBelowLine(true); // 確定填充    
  72. seriesRenderer.setFillBelowLineColor(Color.RED); //填充顏色    
  73. // seriesRenderer.setFillPoints(true); // 不知道干什麼用的    
  74. seriesRenderer.setPointStyle(PointStyle.POINT); //設置畫筆風格    
  75. seriesRenderer.setLineWidth(3.0f); // 設置畫筆寬度    
  76.   
  77. mRenderer.addSeriesRenderer(seriesRenderer);    
  78. mRenderer.setYAxisMin(0d); // 設置Y維度最小值    
  79. mRenderer.setYAxisMax(120d); // 設置Y維度最大值    
  80. mRenderer.setXAxisMax(24d);// 設置X維度最大值    
  81. mRenderer.setShowGrid(true); // 設置背景格子    
  82. mRenderer.setXLabels(24); // 設置X坐標分成24份    
  83. mRenderer.setChartTitle("上證指數-24小時走勢圖");    
  84. mCurrentRenderer = seriesRenderer;    
  85.   
  86. // 數據繪制 To Do    
  87. double x = 0;    
  88. double y = 0;    
  89. // 獲取 (x,y) 數據集    
  90. int[][] xyValues = getValues();    
  91.   
  92. for (int i = 0; i < xyValues.length; i++) {    
  93. x = xyValues[i][0];    
  94. y = xyValues[i][1];    
  95. mCurrentSeries.add(x, y);    
  96. }    
  97.   
  98. }    
  99.   
  100. /**   
  101. * 在 onResume 裡進行繪制 在橫屏切換時自動調用   
  102. */    
  103. @Override    
  104. protected void onResume() {    
  105. super.onResume();    
  106. if (mChartView == null) {    
  107. LinearLayout layout = (LinearLayout) findViewById(R.id.chart);    
  108. mChartView = ChartFactory.getLineChartView(this, mDataset,    
  109. mRenderer);    
  110. layout.addView(mChartView, new LayoutParams(    
  111. LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));    
  112.   
  113. } else {    
  114. mChartView.setBackgroundResource(R.id.chart);    
  115. mChartView.repaint();    
  116. }    
  117. }    
  118.   
  119. /**   
  120. * 數據入口   
  121. *   
  122. * @return x、y 坐標集   
  123. */    
  124. private int[][] getValues() {    
  125. int[][] xyValues = { { 0, 88 }, { 1, 79 }, { 2, 75 }, { 3, 71 },    
  126. { 4, 90 }, { 5, 88 }, { 6, 66 }, { 7, 65 }, { 8, 50 },    
  127. { 9, 78 }, { 10, 67 }, { 11, 77 }, { 12, 79 }, { 13, 85 },    
  128. { 14, 89 }, { 15, 93 }, { 16, 95 }, { 17, 99 }, { 18, 66 },    
  129. { 19, 55 }, { 20, 44 } };    
  130. return xyValues;    
  131. }    
  132.   
  133. /*   
  134. * (non-Javadoc)   
  135. *   
  136. * @see android.app.Activity#onTouchEvent(android.view.MotionEvent)   
  137. */    
  138. @Override    
  139. public boolean onTouchEvent(MotionEvent event) {    
  140.   
  141. return super.onTouchEvent(event);    
  142. }    
  143. }   

       xy_chart.xml (Layout):

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>    
  2.   
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
  4. android:orientation="vertical" android:layout_width="fill_parent"    
  5. android:layout_height="fill_parent">    
  6.   
  7. <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"    
  8. android:text="@string/add_values" />    
  9.   
  10. <TableLayout android:orientation="vertical"    
  11. android:layout_width="fill_parent"    
  12. android:layout_height="wrap_content">    
  13.   
  14. </TableLayout>    
  15.   
  16. <LinearLayout android:id="@+id/chart" android:orientation="horizontal"    
  17. android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" />    
  18.   
  19. <LinearLayout android:orientation="horizontal"    
  20. android:layout_width="fill_parent" android:layout_height="wrap_content" >    
  21. </LinearLayout>    
  22.   
  23. </LinearLayout>   

       AndroidManifest.xml:

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"    
  3. package="com.cn.eagle"    
  4. android:versionCode="1"    
  5. android:versionName="1.0">    
  6.   
  7. <application android:icon="@drawable/icon" android:label="@string/app_name">    
  8.   <activity android:name=". StockChartBuilder "    
  9. android:label="@string/app_name">    
  10. <intent-filter>    
  11. <action android:name="android.intent.action.MAIN" />    
  12. <category android:name="android.intent.category.LAUNCHER" />    
  13. </intent-filter>    
  14. </activity>    
  15.   
  16. <activity android:name="org.achartengine.GraphicalActivity" />    
  17.   
  18. </application>    
  19. </manifest>   

       strings.xml (values):

XML/HTML代碼
  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <resources>    
  3. <string name="hello">Hello World, ChartTest!</string>    
  4. <string name="app_name">走勢圖(示例)</string>    
  5. <string name="add_values">輸入值生成走勢圖</string>    
  6. <string name="x">X</string>    
  7. <string name="y">Y</string>    
  8. <string name="add">Add</string>    
  9. <string name="new_series">New series</string>    
  10. </resources>   

       打完收工^_^ ……

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved