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

2023-11-18

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

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

 

 

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

 1,是在Activity中直接创建

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

 

 

 

 

 

 

 

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

android功能代码--Android报表控件achartengine介绍(二) 的相关文章

随机推荐

  • stm32----用状态机判断单双击

    一 什么是状态机 状态机 State Machine 是一种用于描述系统状态和状态之间转换关系的数学模型 说白了就是做出某个动作之后变成什么样的状态 比如stm32中的按键控制开关灯 假设灯一开始是关的 当我们按下按键之后 灯亮了 这相当于
  • REST API 设计最佳实践:如何正确使用 HTTP 状态码?

    总的来说 HTTP协议出现以来Web服务也就存在了 但是 自从云计算出现后 才成为实现客户端与服务和数据交互的普遍方法 作为一名开发者 我很幸运能够在工作中使用一些仍然存在的SOAP服务 但是 我主要接触的是REST 这是一种基于资源的AP
  • dev express for asp.net 如何更换主题

    1 如下图点击菜单 2 选择主题然后按 Update Project
  • Python——协程(Coroutine),异步IO

    目录 生成器 Generator yield表达式的使用 生产者和消费者模型 编辑 yield from表达式 协程 Coroutine asyncio coroutine async await 总结 由于GIL的存在 导致Python多
  • Java FileReader

    Java FileReader Java FileReader Java FileReader class is part of java io package Java FileReader类是java io软件包的一部分 The Fil
  • Android自动化测试,5个必备的测试框架

    Appium Appium是一个开源的移动测试工具 支持iOS和Android 它可以用来测试任何类型的移动应用 原生 网络和混合 作为一个跨平台的工具 你可以在不同的平台上运行相同的测试 为了实现跨平台的功能 Appium使用了供应商提供
  • python 抖音采集_python爬取抖音视频的实例详解

    import requests import json import re import os from pprint import pprint as pp import queue class DouYin header accept
  • 全书简介和作者寄语

    巨硬的NumPy 巨硬的NumPy 教程包括两部分 从小白到入门 和 从入门到熟练 从小白到入门 旨在帮助没有基础的同学快速掌握 numpy 的常用功能 保证日常绝大多数场景的使用 从入门到熟练 目的是帮助有进一步需要的同学对 numpy
  • (六)Kubernetes - 手动部署(二进制方式安装)

    Kubernetes 手动部署 5 1 部署Nginx Keepalived高可用负载均衡器 1 1 安装软件包 Master1 Master2 1 2 Nginx配置文件 主备相同 1 3 keepalived配置文件 Master1 1
  • mysql jpa 不要自动建表,如何让Hibernate在与JPA一起使用时自动在数据库中创建表?...

    I am new to JPA And for now I am trying to understand standard examples I was reading online and saw a few stackoverflow
  • vue面试题汇总

    HTML篇 CSS篇 JS篇 TypeScript篇 React篇 微信小程序篇 前端面试题汇总大全 含答案超详细 HTML JS CSS汇总篇 持续更新 前端面试题汇总大全二 含答案超详细 Vue TypeScript React 微信小
  • pytorch---之item()

    torch Tensor item 坑 注意只能是一个值 适合返回loss acc
  • 设计模式概念学习

    文章目录 创建类型 单例模式 饿汉 懒汉 openbmc项目实际应用 工厂方法 简单工厂方法 openbmc项目实际应用 抽象工厂 以下为学习时对各种设计模式的简单理解 还没有深入学习和实际应用 推荐1个 很棒的网站学习设计模式 每个模式都
  • 01-windows下python爬取网页上的图片

    1 首先下载python 安装环境 pycharm anaconda的下载与安装 移步各个主页下载 一键式安装 pycharm http www jetbrains com pycharm anaconda https www anacon
  • 什么是算子?

    什么是算子 在知道什么是算子之前我们还需要知道一些其他的相关概念 大概来说 算子是一个函数空间到函数空间上的映射O X X 广义上的算子可以推广到任何空间 如内积空间等 映射 从一个拓扑空间到另一个拓扑空间的对应关系 对于每一个x 都有唯一
  • 【应用层2】Http协议

    一 简介 Http 即超文本传输协议 一种建立在 TCP 上的无状态连接 属于应用层协议 http传输的内容都是明文的 不安全的 Http 协议用于客户端与服务器端之间的通信 它规定了客户端与服务端之间的通信格式 包括请求和响应的格式 Ht
  • Springboot中配置activeMQ持久化

    一 activeMQ数据库持久化配置 ActiveMQ持久化的三种方式 我们采用数据库的方式来进行持久化 1 Memory 消息存储 基于内存的消息存储 2 基于日志消息存储方式 KahaDB是ActiveMQ的默认日志存储方式 它提供了容
  • MYSQL刷新字段:“指定字符”+年月日+三位流水号

    项目场景 项目场景 生成编号 指定字符 年月日 三位流水号 需求阐述 已经写完了生成流水号的代码 但是之前的数据并没有此类编码 所以需要把数据库新建的编码字段进行刷新 刷新数据的逻辑 根据指定字符 LSH 数据的创建时间 三位流水号进行拼接
  • 解决mysqld服务启动失败

    原因如下 1 进程占用 首先查看下mysql进程 ps aux grep mysql 有进程号占用了 kill 这个进程号 再重启服务 2 所有者和所属组为mysql 查看 usr local MySQL data mysqld pid所有
  • android功能代码--Android报表控件achartengine介绍(二)

    Android报achartengine再详细的介绍可以查看 http blog csdn net lk blog article details 7642751 在achartengine中两种创建报表的方式 1 是在Activity中直