android功能代码--Android报表控件achartengine介绍(二)

墨蓝 2023-10-16 18:38 55阅读 0赞

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

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

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

1,是在Activity中直接创建

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

Java代码 复制代码 收藏代码spinner.gif

  1. package com.sinosoft.chartdemo;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;
  5. import org.achartengine.ChartFactory;
  6. import org.achartengine.GraphicalView;
  7. import org.achartengine.chart.PointStyle;
  8. import org.achartengine.model.SeriesSelection;
  9. import org.achartengine.model.XYMultipleSeriesDataset;
  10. import org.achartengine.model.XYSeries;
  11. import org.achartengine.renderer.XYMultipleSeriesRenderer;
  12. import org.achartengine.renderer.XYSeriesRenderer;
  13. import org.achartengine.tools.PanListener;
  14. import org.achartengine.tools.ZoomEvent;
  15. import org.achartengine.tools.ZoomListener;
  16. import android.app.Activity;
  17. import android.graphics.Color;
  18. import android.graphics.Paint.Align;
  19. import android.os.Bundle;
  20. import android.util.Log;
  21. import android.view.View;
  22. import android.view.ViewGroup.LayoutParams;
  23. import android.widget.LinearLayout;
  24. import android.widget.Toast;
  25. /**
  26. * 嵌入Acitivity中的折线图
  27. *
  28. * @author jianfan
  29. *
  30. */
  31. public class LineChartActivity extends BasicActivity {
  32. private XYMultipleSeriesDataset mDataset;
  33. private XYMultipleSeriesRenderer mRenderer;
  34. private XYSeries mCurrentSeries;
  35. private XYSeriesRenderer mCurrentRenderer;
  36. private GraphicalView mChartView;
  37. @Override
  38. protected void onCreate(Bundle savedInstanceState) {
  39. Log.i(“onCreate”, “onCreate”);
  40. super.onCreate(savedInstanceState);
  41. setContentView(R.layout.activity_main);
  42. Init();
  43. }
  44. /********
  45. * 初始化数据DataSet和Renderer
  46. *****/
  47. private void Init() {
  48. InitRenderer();
  49. InitDataSet();
  50. }
  51. /***********
  52. * 初始化 XYMultipleSeriesRenderer
  53. **********/
  54. private void InitRenderer() {
  55. // 每个序列的颜色设置
  56. int[] colors = new int[] { Color.BLUE, Color.GREEN, Color.CYAN, Color.YELLOW };
  57. // 每个序列中点的形状设置
  58. PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND, PointStyle.TRIANGLE, PointStyle.SQUARE };
  59. // 调用AbstractChart中的方法设置renderer.
  60. // 设置线条的颜色和点的形状
  61. mRenderer = buildRenderer(colors, styles);
  62. int length = mRenderer.getSeriesRendererCount();
  63. // 设置图上线上的点为实心
  64. for (int i = 0; i < length; i++) {
  65. ((XYSeriesRenderer) mRenderer.getSeriesRendererAt(i)).setFillPoints(true);
  66. }
  67. // 调用AbstractChart中的方法设置图表的renderer属性.
  68. setChartSettings(mRenderer, “平均温度”, “月份”, “温度”, 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);
  69. // 设置x轴显示12个点,根据setChartSettings的最大值和最小值自动计算点的间隔
  70. mRenderer.setXLabels(12);
  71. // 设置y轴显示10个点,根据setChartSettings的最大值和最小值自动计算点的间隔
  72. mRenderer.setYLabels(10);
  73. mRenderer.setBackgroundColor(Color.BLACK);// 设置背景颜色
  74. mRenderer.setApplyBackgroundColor(true); // 使背景色生效
  75. mRenderer.setShowGrid(true);// 是否显示网格
  76. mRenderer.setXLabelsAlign(Align.RIGHT);// 刻度线与刻度标注之间的相对位置关系
  77. mRenderer.setYLabelsAlign(Align.RIGHT);// 刻度线与刻度标注之间的相对位置关系
  78. mRenderer.setZoomButtonsVisible(true);// 是否显示放大缩小按钮
  79. mRenderer.setPanLimits(new double[] { -10, 20, -10, 40 }); // 设置拖动时X轴Y轴允许的最大值最小值.
  80. mRenderer.setZoomLimits(new double[] { -10, 20, -10, 40 });// 设置放大缩小时X轴Y轴允许的最大最小值.
  81. }
  82. /***********
  83. * 初始化 XYMultipleSeriesDataset
  84. **********/
  85. private void InitDataSet() {
  86. // 图例
  87. String[] titles = new String[] { “克里特岛”, “科孚岛”, “萨索斯岛”, “斯基亚索斯岛” };
  88. // 每个序列中点的X坐标
  89. List x = new ArrayList();
  90. for (int i = 0; i < titles.length; i++) {
  91. x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
  92. }
  93. // titles数组中每个标识物对应的线条
  94. List values = new ArrayList();
  95. // 克里特岛的点的y坐标
  96. 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 });
  97. // 科孚岛的点的y坐标
  98. values.add(new double[] { 10, 10, 12, 15, 20, 24, 26, 26, 23, 18, 14, 11 });
  99. // 萨索斯岛的点的y坐标
  100. values.add(new double[] { 5, 5.3, 8, 12, 17, 22, 24.2, 24, 19, 15, 9, 6 });
  101. // 斯基亚索斯岛的点的y坐标
  102. values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 });
  103. mDataset = buildDataset(titles, x, values);
  104. }
  105. /*********************
  106. * 当Activity失去焦点的时候用来保存数据的方法
  107. */
  108. @Override
  109. protected void onSaveInstanceState(Bundle outState) {
  110. Log.i(“onSaveInstanceState”, “onSaveInstanceState”);
  111. super.onSaveInstanceState(outState);
  112. outState.putSerializable(“dataset”, mDataset);
  113. outState.putSerializable(“renderer”, mRenderer);
  114. outState.putSerializable(“current_series”, mCurrentSeries);
  115. outState.putSerializable(“current_renderer”, mCurrentRenderer);
  116. }
  117. /*********************
  118. * 当Activity重新获取焦点的时,取回之前保存的数据
  119. */
  120. @Override
  121. protected void onRestoreInstanceState(Bundle savedInstanceState) {
  122. Log.i(“onRestoreInstanceState”, “onRestoreInstanceState”);
  123. super.onRestoreInstanceState(savedInstanceState);
  124. mDataset = (XYMultipleSeriesDataset) savedInstanceState.getSerializable(“dataset”);
  125. mRenderer = (XYMultipleSeriesRenderer) savedInstanceState.getSerializable(“renderer”);
  126. mCurrentSeries = (XYSeries) savedInstanceState.getSerializable(“current_series”);
  127. mCurrentRenderer = (XYSeriesRenderer) savedInstanceState.getSerializable(“current_renderer”);
  128. }
  129. @Override
  130. protected void onResume() {
  131. Log.i(“onResume”, “onResume”);
  132. super.onResume();
  133. if (mChartView == null) {
  134. LinearLayout layout = (LinearLayout) findViewById(R.id.chart);
  135. mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);
  136. mRenderer.setClickEnabled(true);// 设置图表是否允许点击
  137. // 设置点的缓冲半径值(在某点附件点击时,多大范围内都算点击这个点)
  138. mRenderer.setSelectableBuffer(10);
  139. mChartView.setOnClickListener(new View.OnClickListener() {
  140. @Override
  141. public void onClick(View v) {
  142. // 这段代码处理点击一个点后,获得所点击的点在哪个序列中以及点的坐标.
  143. // —>start
  144. SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
  145. double[] xy = mChartView.toRealPoint(0);
  146. if (seriesSelection == null) {
  147. Toast.makeText(LineChartActivity.this, “没有图表元素被点击”, Toast.LENGTH_SHORT).show();
  148. } else {
  149. 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();
  150. }
  151. }
  152. // —>end
  153. });
  154. mChartView.setOnLongClickListener(new View.OnLongClickListener() {
  155. @Override
  156. public boolean onLongClick(View v) {
  157. SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
  158. if (seriesSelection == null) {
  159. Toast.makeText(LineChartActivity.this, “No chart element was long pressed”, Toast.LENGTH_SHORT);
  160. return false; // no chart element was long pressed, so
  161. // let something
  162. // else handle the event
  163. } else {
  164. Toast.makeText(LineChartActivity.this, “Chart element in series index “ + seriesSelection.getSeriesIndex() + “ data point index “ + seriesSelection.getPointIndex() + “ was long pressed”, Toast.LENGTH_SHORT);
  165. return true; // the element was long pressed - the event
  166. // has been
  167. // handled
  168. }
  169. }
  170. });
  171. // 这段代码处理放大缩小
  172. // —>start
  173. mChartView.addZoomListener(new ZoomListener() {
  174. public void zoomApplied(ZoomEvent e) {
  175. String type = “out”;
  176. if (e.isZoomIn()) {
  177. type = “in”;
  178. }
  179. System.out.println(“Zoom “ + type + “ rate “ + e.getZoomRate());
  180. }
  181. public void zoomReset() {
  182. System.out.println(“Reset”);
  183. }
  184. }, true, true);
  185. // —>end
  186. // 设置拖动图表时后台打印出图表坐标的最大最小值.
  187. mChartView.addPanListener(new PanListener() {
  188. public void panApplied() {
  189. System.out.println(“New X range=[“ + mRenderer.getXAxisMin() + “, “ + mRenderer.getXAxisMax() + “], Y range=[“ + mRenderer.getYAxisMax() + “, “ + mRenderer.getYAxisMax() + “]“);
  190. }
  191. });
  192. layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
  193. boolean enabled = mDataset.getSeriesCount() > 0;
  194. } else {
  195. mChartView.repaint();
  196. }
  197. }
  198. }

发表评论

表情:
评论列表 (有 0 条评论,55人围观)

还没有评论,来说两句吧...

相关阅读