本文是讲述如何使用XYMultipleSeriesRenderer绘制K线图,并且点击弹出pop的实例,由于是从项目中摘出来的,所有只有主要代码并不是完成能够直接运行的程序。

依赖包下载:achartengine-1.0.0.jar    下载链接

首先:绘制K线图,并设置其相关属性

变量:

    private LinearLayout containerbody;private GraphicalView mLineChartView;private PopupWindow mPopupWindow;private PopupWindow mPopupWindow1;private PopupWindow popWin;private View mPopupView;private View mPopupView1;private TextView mPopTxt1;private TextView mPopTxt2;private TextView mPopTxt3;private TextView mPopTxt4;private XYSeries series;private final int CHART_MARGINS_LEFT = 20;private final int CHART_MARGINS_TOP = 30;private final int CHART_MARGINS_RIGHT = 20;
//    private final int CHART_MARGINS_BOTTOM = 0;private int chart_margins_bottom;private final int CHART_X_LABELS = 9;private final int CHART_Y_LABELS = 6;private final int CHART_X_AXISMAX = CHART_X_LABELS + 1;private final int CHART_Y_AXISMAX = CHART_Y_LABELS * 10;private int panXLimit;private int lineEndX;private int mEventStartX;
//    private int mEventStartY;private int mEventEndX;private int mEventEndY;private int mScreenOffsetX = 0;
//    private int mScreenOffsetY = 0;private int POPWIN_WIDTH ;private int POPWIN_HEIGHT;private int POPWIN_WIDTH1 ;private int POPWIN_HEIGHT1;

initChartView:

private void initChartView(){System.out.println("initChartView here !");// 1, 构造显示用渲染图XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
//  renderer.setPointSize(5);// 2,进行显示XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();// 2.1, 构建数据series = new XYSeries("业绩曲线");// 填充数据System.out.println("initChartView here !lineEndX = " + lineEndX);for (int x = 0; x < lineEndX; x++){// 填x,y值mDataMap = mDataMapList.get(x);// X轴从1开始,所以x+1series.add(x + 1, Integer.parseInt(mDataMap.get("BUSTOTAL")));
//   series.add(x + 1, (int) Math.abs(Math.random() * CHART_Y_AXISMAX));System.out.println("x = " + (x + 1) + " | y = " + Integer.parseInt(mDataMap.get("BUSTOTAL")));}// 需要绘制的点放进dataset中dataset.addSeries(series);// 3, 对点的绘制进行设置XYSeriesRenderer xyRenderer = new XYSeriesRenderer();// 3.1设置K 线颜色xyRenderer.setColor(Color.RED);// 3.2设置点的样式xyRenderer.setPointStyle(PointStyle.CIRCLE);xyRenderer.setFillPoints(true);//设置线的宽度xyRenderer.setLineWidth(3);// 3.3, 将要绘制的点添加到坐标绘制中renderer.addSeriesRenderer(xyRenderer);// 4, 设置图表属性// 显示网格renderer.setShowGrid(true);// 设置4周边距chart_margins_bottom = (int) getResources().getDimension(R.dimen.chart_margin_bottom);renderer.setMargins(new int[] { CHART_MARGINS_TOP, CHART_MARGINS_LEFT, chart_margins_bottom, CHART_MARGINS_RIGHT });// 边框外侧颜色
//  renderer.setMarginsColor(Color.argb(0, 0xff, 0, 0)); // 穿透背景色renderer.setMarginsColor(Color.WHITE);// 设置背景颜色renderer.setBackgroundColor(Color.TRANSPARENT);// 设置背景颜色生效renderer.setApplyBackgroundColor(true);// 是否支持图表移动renderer.setPanEnabled(true, false);// 坐标滑动上、下限renderer.setPanLimits(new double[]{1, panXLimit, 0, 100});// 是否支持图表缩放renderer.setZoomEnabled(false, false);// X轴等分,最小、最大坐标值renderer.setXLabels(CHART_X_LABELS);renderer.setXAxisMin(1);renderer.setXAxisMax(CHART_X_AXISMAX);// Y轴等分,最小、最大坐标值renderer.setYLabels(CHART_Y_LABELS);renderer.setYAxisMin(0);renderer.setYAxisMax(CHART_Y_AXISMAX);// 坐标轴颜色renderer.setAxesColor(Color.rgb(242, 103, 16));// 坐标轴单位文字颜色、字号renderer.setLabelsColor(Color.rgb(25, 110, 172));renderer.setLabelsTextSize(16);// 坐标轴文字对齐renderer.setYLabelsAlign(Paint.Align.RIGHT);//设置原点大小renderer.setPointSize(5);// 设置图表标题文字
//  renderer.setChartTitle(getString(R.string.chart_title));// 是否显示图例renderer.setShowLegend(false);// 生成图表视图mLineChartView = ChartFactory.getLineChartView(ShowChartActivity.this, dataset, renderer);mLineChartView.setOnTouchListener(chartViewOnTouchListener);mLineChartView.setId(0);// 添加至父容器containerbody = (LinearLayout) findViewById(R.id.container_chart);containerbody.addView(mLineChartView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
//  firstShowChart();}

2、监听其onTouch事件:其中,弹出pop窗口是根据项目需要弹出蓝色向左、蓝色向右、绿色向左、绿色向右四种pop.

private OnTouchListener chartViewOnTouchListener = new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event){// TODO Auto-generated method stubdismissPopupWindow();switch (event.getAction()){case MotionEvent.ACTION_DOWN:mEventStartX = (int) event.getX();
//    mEventStartY = (int) event.getY();break;case MotionEvent.ACTION_UP:// *图表点击坐标mEventEndX = (int) event.getX();mEventEndY = (int) event.getY();System.out.println("1.------------------------------");// 屏幕是否位移mScreenOffsetX += mEventEndX - mEventStartX == 0 ? 0 : mEventEndX - mEventStartX;// 是否超出X轴原点(是,归0)mScreenOffsetX = mScreenOffsetX > 0 ? 0 : mScreenOffsetX;System.out.println("############ mOffsetX = " + mScreenOffsetX);if (event.getX() < CHART_MARGINS_LEFT || event.getX() > containerbody.getRight() - CHART_MARGINS_LEFT || event.getY() < CHART_MARGINS_TOP|| event.getY() > containerbody.getBottom() - CHART_MARGINS_TOP){// out of the chartView, do nothing.}else{// 取屏幕宽、高int screenWidth = getWindowManager().getDefaultDisplay().getWidth();int screenHeight = getWindowManager().getDefaultDisplay().getHeight();// 取图表区域宽、高int chartViewWidth = mLineChartView.getWidth();int chartViewHeight = mLineChartView.getHeight();// 求图表单元格宽、高int chartCellWidth = (chartViewWidth - CHART_MARGINS_LEFT * 2) / CHART_X_LABELS;int chartCellHeight = (chartViewHeight - CHART_MARGINS_TOP - chart_margins_bottom) / CHART_Y_LABELS;// 是否超出X轴上限(是,取上限值)mScreenOffsetX = mScreenOffsetX < -chartCellWidth * (panXLimit - CHART_X_AXISMAX) ? -chartCellWidth * (panXLimit - CHART_X_AXISMAX): mScreenOffsetX;System.out.println("-chartCellWidth * panXLimit = " + -chartCellWidth * (panXLimit - CHART_X_AXISMAX));System.out.println("@@@@mScreenOffsetX = " + mScreenOffsetX);// *求图表像素坐标 换算成图表单位坐标int chartEventX = 1 + Math.round((mEventEndX - CHART_MARGINS_LEFT) / chartCellWidth);int chartEventY = CHART_Y_AXISMAX - Math.round((mEventEndY - CHART_MARGINS_TOP) / chartCellHeight * 10);System.out.println("chartEventX = " + chartEventX);System.out.println("chartEventY = " + chartEventY);// 求位移单元格int chartOffsetX = Math.round(mScreenOffsetX / chartCellWidth);System.out.println("############ chartOffsetX = " + chartOffsetX);System.out.println("2.================================");// 求图表像素坐标 换算成屏幕像素坐标     int screenEventX = mEventEndX + (screenWidth - chartViewWidth) / 2;int screenEventY = mEventEndY + (screenHeight - chartViewHeight) / 2;
//     System.out.println("chartEventX = " + event.getX());
//     System.out.println("chartEventY = " + event.getY());
//     System.out.println("screenEventX = " + screenEventX);
//     System.out.println("screenEventY = " + screenEventY);boolean mType = true;isShowPopWin: for (int i = 0; i < lineEndX; i++){int pxSeriesX = ((int) (series.getX(i)) - 1) * chartCellWidth + CHART_MARGINS_LEFT;int pxSeriesY = (CHART_Y_AXISMAX - (int) (series.getY(i))) * chartCellHeight / 10 + CHART_MARGINS_TOP;System.out.println("3.**********************************");
//      System.out.println(" mEventEndX = " + mEventEndX);
//      System.out.println(" pxSeriesX + mScreenOffsetX - chartCellWidth / 2 = " + (pxSeriesX + mScreenOffsetX - chartCellWidth / 2));
//      System.out.println(" pxSeriesX + mScreenOffsetX + chartCellWidth / 2 = " + (pxSeriesX + mScreenOffsetX + chartCellWidth / 2));
//      System.out.println(" mEventEndY = " + mEventEndY);
//      System.out.println(" pxSeriesY - chartCellHeight / 2 = " + (pxSeriesY - chartCellHeight / 2));
//      System.out.println(" pxSeriesY + chartCellHeight / 2 = " + (pxSeriesY + chartCellHeight / 2));if (mEventEndX > pxSeriesX + mScreenOffsetX - chartCellWidth / 2 && mEventEndX < pxSeriesX + mScreenOffsetX + chartCellWidth / 2&& mEventEndY > pxSeriesY - chartCellHeight / 2 && mEventEndY < pxSeriesY + chartCellHeight / 2){System.out.println(" series.getX(i) = " + series.getX(i));System.out.println(" pxSeriesX = " + pxSeriesX);mDataMap = mDataMapList.get(i);String bustotal = mDataMap.get("BUSTOTAL").toString();String busunsuccess = mDataMap.get("BUSUNSUCCESS").toString();touchPoint = i;// 根据type,判断窗口绿or蓝if("0".equals(mDataMap.get("type").toString())){mType = false;mPopTxt1.setText("预约" + bustotal + "条");mPopTxt2.setText(busunsuccess + "条");}else{mType = true;mPopTxt4.setText("已办理" + bustotal + "条");}if (screenWidth - screenEventX < POPWIN_WIDTH){mPopupView.setBackgroundDrawable(getResources().getDrawable(R.drawable.blue_pop_right));mPopupView.setPadding(0, dip2px(ShowChartActivity.this, 30), dip2px(ShowChartActivity.this, 23), 0);mPopTxt1.setGravity(Gravity.RIGHT);mPopTxt2.setGravity(Gravity.RIGHT);mPopTxt3.setGravity(Gravity.RIGHT);mPopupView1.setBackgroundDrawable(getResources().getDrawable(R.drawable.green_pop_right));mPopupView1.setPadding(0, dip2px(ShowChartActivity.this, 30), dip2px(ShowChartActivity.this, 23), 0);mPopTxt4.setGravity(Gravity.RIGHT);screenEventX -= POPWIN_WIDTH;}else{mPopupView.setBackgroundDrawable(getResources().getDrawable(R.drawable.blue_pop_left));mPopupView.setPadding(dip2px(ShowChartActivity.this, 23), dip2px(ShowChartActivity.this, 30), 0, 0);mPopTxt1.setGravity(Gravity.LEFT);mPopTxt2.setGravity(Gravity.LEFT);mPopTxt3.setGravity(Gravity.LEFT);mPopupView1.setBackgroundDrawable(getResources().getDrawable(R.drawable.green_pop_left));mPopupView1.setPadding(dip2px(ShowChartActivity.this, 20), dip2px(ShowChartActivity.this, 30), 0, 0);mPopTxt4.setGravity(Gravity.LEFT);}mPopupWindow = new PopupWindow(mPopupView, POPWIN_WIDTH, POPWIN_HEIGHT);mPopupWindow1 = new PopupWindow(mPopupView1, POPWIN_WIDTH1, POPWIN_HEIGHT1);if(mType){if (mPopupWindow1.isShowing()){mPopupWindow1.update(screenEventX, screenEventY + POPWIN_HEIGHT / 3, POPWIN_WIDTH, POPWIN_HEIGHT);}else{mPopupWindow1.showAtLocation(mLineChartView, Gravity.NO_GRAVITY, screenEventX, screenEventY + POPWIN_HEIGHT / 3);}}else{if (mPopupWindow.isShowing()){mPopupWindow.update(screenEventX, screenEventY + POPWIN_HEIGHT / 3, POPWIN_WIDTH, POPWIN_HEIGHT);}else{mPopupWindow.showAtLocation(mLineChartView, Gravity.NO_GRAVITY, screenEventX, screenEventY + POPWIN_HEIGHT / 3);}}break isShowPopWin;}}}break;default:break;}return false;}};

效果图:

XYMultipleSeriesRenderer 绘制K线图,点击弹出pop相关推荐

  1. python画k线图_小白学Python(14)——pyecharts 绘制K线图 Kline/Candlestick

    Kline-基本示例 from pyecharts import options as opts from pyecharts.charts import Kline data = [ [2320.2 ...

  2. python 股票图表_k线图分析法_【趣味案例】用Python绘制K线图,一眼看清股市状况...

    本文介绍关于[趣味案例]用Python绘制K线图,一眼看清股市状况及神一般的裸k交易法,精髓就这三步,一目了然!精髓就这三步,一目了然!(附图解析)的相关内容. [趣味案例]用Python绘制K线图, ...

  3. Tableau绘制K线图、布林线、圆环图、雷达图

    Tableau绘制K线图.布林线.圆环图.雷达图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. K线图 1.1 导入数据源 1.2 拖拽字段 将[日期]托到列 ...

  4. 微信小程序使用Echarts绘制K线图与双曲线图以及实现tab切换

    在微信小程序中使用Echarts需要下载相应的文件,可在这下载ec-canvas,该github里也有很多很好的例子,可自行调试学习. 本例子的目录结构: 微信小程序使用Echarts的步骤 在需要引 ...

  5. java k线绘制,用Java绘制K线图[Java编程]

    赞助商链接 本文"用Java绘制K线图[Java编程]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具 ...

  6. python能画k线图吗_,求教使用python绘制K线图

    如何用python实现视频关键帧提取并保存为图片 import cv2 vc = cv2.VideoCapture('Test.avi') #读入视频文件 c=1 if vc.isOpened(): ...

  7. 带着canvas去流浪系列之五 绘制K线图

    [摘要] 用canvas原生API实现百度Echarts 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvasAPI绘制 ...

  8. python画k线图_Python绘制K线图

    不管是对量化分析师还是普通的投资者来说,K线图(蜡烛图)都是一种很经典.很重要的工具.在K线图中,它会绘制每天的最高价.最低价.开盘价和收盘价,这对于我们理解股票的趋势以及每天的多空对比很有帮助. 一 ...

  9. 【带着canvas去流浪(5)】绘制K线图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文 ...

最新文章

  1. arp欺骗攻击——获取内网中用户浏览的图片信息
  2. Android利用Jsoup解析html 开发网站客户端小记。
  3. PHP基础3_数组,循环及函数
  4. linux 蓝牙脚本,linux下蓝牙开发(bluez应用)
  5. 如何使用RMAN duplicate搭建12C的Data Guard环境?
  6. 使用vSphere Web Client导出/导入/还原分布式交换机配置(2034602)
  7. java和seo学那个_Java和PHP编程语言哪个比较厉害?
  8. 压缩文件后,每次的HASH值(MD5)都不相同的原因
  9. 冒泡法排序c语言代码大全,C语言实现选择排序、冒泡排序和快速排序的代码示例...
  10. 计算机word简历制作教程,用word制作个人简历的方法
  11. QT安装 and VS2019中安装QT插件
  12. 全国计算机软件哪年开考的,全国计算机软件考试开始报名 11月8日开考
  13. 2022/4/18 天梯赛刷题记录2022天梯赛热身赛
  14. 机器学习中样本不平衡,怎么办?
  15. python批量修改文件扩展名
  16. wdm驱动的学习初步
  17. github项目管理和贡献代码
  18. 计算机研究生论文写作 问题记录
  19. 关于跳出while(1)死循环问题
  20. JAVA中关于可变和不可变类型的理解

热门文章

  1. SAP如何在创建销售订单时生成VF04开票索引VKDFS
  2. Ubuntu把数据从一个硬盘完全拷贝到另一个硬盘的方法
  3. 中国大学面积排行榜,最大最小差了1600倍
  4. 2019湖南大学计算机考研分数线,湖南大学2019年考研分数线湖大复试过线多少分...
  5. electron-vue项目构建打包错误失败问题合集
  6. Cesium 设置实体要素闪烁
  7. java智能推算出时间_Java时间戳推算N天前的日期测试发现跟预期有差异
  8. 桌面运维:重置电脑\系统重装
  9. 安装ttf-mscorefonts-installer的方法
  10. 导弹发射各项参数计算涉及计算机应用,《计算机应用基础》复习题七(6页).doc...