一步一步教你写股票走势图——K线图二(图表联动)

article/2025/10/28 20:44:16

目录
一步一步教你写股票走势图——分时图一(概述)
一步一步教你写股票走势图——分时图二(自定义xy轴)
一步一步教你写股票走势图——分时图三(对齐图表、自定义柱状图高亮)
一步一步教你写股票走势图——分时图四(高亮联动)
一步一步教你写股票走势图——分时图五(自定义标记)
一步一步教你写股票走势图——K线图一(概述)
一步一步教你写股票走势图——K线图二(图表联动)
一步一步教你写股票走势图——K线图三(添加均线)
一步一步教你写股票走势图——K线图四(高亮联动一)
一步一步教你写股票走势图——K线图五(高亮联动二)
一步一步教你写股票走势图——商业版


demo更新地址https://github.com/AndroidJiang/StockChart


K线图越做发现坑越多,跟之前做的分时图完全不是一个重量级的啊,分时图不需要滚动,少走了很多弯路,K线图因为滚动的问题,会导致很多其他问题,比如:

  • 多个图表之间滚动时怎么联动
  • 高亮滚动冲突
  • 放缩联动

表对齐

下面我们就开始介绍本节的内容,要想实现图表之间的联动,那么必须得保证图表是对齐的,联动起来效果才能保持一致,图表对齐功能,我们在分时图部分已经讲解,代码一致,还是简单贴下代码:

 /*设置量表对齐*/private void setOffset() {float lineLeft = combinedchart.getViewPortHandler().offsetLeft();float barLeft = barChart.getViewPortHandler().offsetLeft();float lineRight = combinedchart.getViewPortHandler().offsetRight();float barRight = barChart.getViewPortHandler().offsetRight();float offsetLeft, offsetRight;/*注:setExtraLeft...函数是针对图表相对位置计算,比如A表offLeftA=20dp,B表offLeftB=30dp,则A.setExtraLeftOffset(10),并不是30,还有注意单位转换*/if (barLeft < lineLeft) {offsetLeft = Utils.convertPixelsToDp(lineLeft - barLeft);barChart.setExtraLeftOffset(offsetLeft);} else {offsetLeft = Utils.convertPixelsToDp(barLeft-lineLeft);combinedchart.setExtraLeftOffset(offsetLeft);}/*注:setExtraRight...函数是针对图表绝对位置计算,比如A表offRightA=20dp,B表offRightB=30dp,则A.setExtraLeftOffset(30),并不是10,还有注意单位转换*/if (barRight < lineRight) {offsetRight = Utils.convertPixelsToDp(lineRight);barChart.setExtraRightOffset(offsetRight);} else {offsetRight = Utils.convertPixelsToDp(barRight);combinedchart.setExtraRightOffset(offsetRight);}}

表联动

表的联动这里包括滚动联动、放缩联动,具体操作效果图还是参照自选股:

这里写图片描述

博主在stackover上发现了有人曾提过类似问题:

这里写图片描述

幸运的是有人也回答了这个问题,具体请点击上面的链接查看。

public class CoupleChartGestureListener implements OnChartGestureListener {private static final String TAG = CoupleChartGestureListener.class.getSimpleName();private Chart srcChart;private Chart[] dstCharts;public CoupleChartGestureListener(Chart srcChart, Chart[] dstCharts) {this.srcChart = srcChart;this.dstCharts = dstCharts;}……@Overridepublic void onChartScale(MotionEvent me, float scaleX, float scaleY) {
//        Log.d(TAG, "onChartScale " + scaleX + "/" + scaleY + " X=" + me.getX() + "Y=" + me.getY());syncCharts();}@Overridepublic void onChartTranslate(MotionEvent me, float dX, float dY) {
//        Log.d(TAG, "onChartTranslate " + dX + "/" + dY + " X=" + me.getX() + "Y=" + me.getY());syncCharts();}public void syncCharts() {Matrix srcMatrix;float[] srcVals = new float[9];Matrix dstMatrix;float[] dstVals = new float[9];// get src chart translation matrix:srcMatrix = srcChart.getViewPortHandler().getMatrixTouch();srcMatrix.getValues(srcVals);// apply X axis scaling and position to dst charts:for (Chart dstChart : dstCharts) {if (dstChart.getVisibility() == View.VISIBLE) {dstMatrix = dstChart.getViewPortHandler().getMatrixTouch();dstMatrix.getValues(dstVals);dstVals[Matrix.MSCALE_X] = srcVals[Matrix.MSCALE_X];dstVals[Matrix.MSKEW_X] = srcVals[Matrix.MSKEW_X];dstVals[Matrix.MTRANS_X] = srcVals[Matrix.MTRANS_X];dstVals[Matrix.MSKEW_Y] = srcVals[Matrix.MSKEW_Y];dstVals[Matrix.MSCALE_Y] = srcVals[Matrix.MSCALE_Y];dstVals[Matrix.MTRANS_Y] = srcVals[Matrix.MTRANS_Y];dstVals[Matrix.MPERSP_0] = srcVals[Matrix.MPERSP_0];dstVals[Matrix.MPERSP_1] = srcVals[Matrix.MPERSP_1];dstVals[Matrix.MPERSP_2] = srcVals[Matrix.MPERSP_2];dstMatrix.setValues(dstVals);dstChart.getViewPortHandler().refresh(dstMatrix, dstChart, true);}}}
}

于是抱着试试看的态度试了一下,却发现问题了,请看:

这里写图片描述

我们发现对同一个表进行滚动时,没有任何问题,但是在一个表滚动ing,再对另一个表进行滚动,就会出现冲突了,刚开始我以为是我的问题,后来发现同样用这端代码的其他人,也出现这个问题,不知道哪位大神能给出解决方法,请大神留下您那宝贵的意见。
考虑到这个冲突问题比较严重,稍微滑动就会出现这种情况,所以机智的楼主想出了另一招,加了两行代码:

  combinedchart.setDragDecelerationEnabled(false);barChart.setDragDecelerationEnabled(false);

估计有人已经知道这两句代码的意思了,作用就是手指滑动屏幕,离开后不会有惯性滚动,这虽然解决了上面的bug,但是在体验上却大不如前,不过只好先这么着了,看效果图:
这里写图片描述

滚动联动已经完成,还有放缩联动呢,我们看下效果图:

这里写图片描述

ok,木有问题,图表联动部分到这里结束,下面初步介绍一下高亮联动,因为这里涉及到手势冲突问题,目前只实现了简单的点击高亮联动,具体的在滚动中然后使用高亮,我们日后再行补充,这里逻辑和分时图一样,直接上代码:

 combinedchart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {@Overridepublic void onValueSelected(Entry e, int dataSetIndex, Highlight h) {barChart.highlightValues(new Highlight[]{h});// combinedchart.setHighlightValue(h);}@Overridepublic void onNothingSelected() {}});barChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {@Overridepublic void onValueSelected(Entry e, int dataSetIndex, Highlight h) {combinedchart.highlightValues(new Highlight[]{h});}@Overridepublic void onNothingSelected() {}});

这里写图片描述

本期内容就讲到这里了,这只是个初版,以后还会改进,但是毕竟都是要经历的砍,所以还是放出来了,以后慢慢会优化,有好的建议希望能联系我,将更好的东西开源出来!


目录
一步一步教你写股票走势图——分时图一(概述)
一步一步教你写股票走势图——分时图二(自定义xy轴)
一步一步教你写股票走势图——分时图三(对齐图表、自定义柱状图高亮)
一步一步教你写股票走势图——分时图四(高亮联动)
一步一步教你写股票走势图——分时图五(自定义标记)
一步一步教你写股票走势图——K线图一(概述)
一步一步教你写股票走势图——K线图二(图表联动)
一步一步教你写股票走势图——K线图三(添加均线)
一步一步教你写股票走势图——K线图四(高亮联动一)
一步一步教你写股票走势图——K线图五(高亮联动二)
一步一步教你写股票走势图——商业版


demo更新地址https://github.com/AndroidJiang/StockChart



http://chatgpt.dhexx.cn/article/wvS3sar7.shtml

相关文章

如何对走势图进行画线分析

现货黄金投资入门与技巧&#xff0c;如何都绕不开这个问题&#xff0c;那就是画线分析。画线分析是技术分析一个重要的流派&#xff0c;也是我们分析市场必不可少的手段&#xff0c;掌握画线的方法&#xff0c;对我们掌握现货黄金投资入门与技巧有很大的帮助。 一、支撑线和压力…

使用Python绘制精美绝伦的股票行情K线图

PythonPyQt2.74 本文简单介绍了如何从Tushare获取某支股票的价格数据&#xff0c;并根据价格数据画出相应的日K线图。 # -*- coding: utf-8 -*-import sys import talib import numpy as np import pandas as pd import tushare as ts import datetime as dt import pyqtgraph …

缠论 公式 自动画线 画笔 中枢 买卖点 源代码

显示效果 跨级别区间套演示 板块演示 个股演示 期货演示 源码如下&#xff1a; {三角形中枢}时间:4;A:HHHV(H,时间*5) AND HHV(H,时间*5)>REF(HHV(H,时间*5),1);B:LLLV(L,时间*5) AND LLV(L,时间*5)<REF(LLV(L,时间*5),1);CC1:DRAWLINE(A,H,B,L,0);CC2:DRAWLINE(B,L,A,H…

利用 python numpy +matplotlib 绘制股票k线图

一、python numpy matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from matplotlib import pyplot as plt from matplotlib import animationfig plt.figure(figsize(8,6), dpi72,facecolor"white") axes plt.subplot(1…

一步一步教你写股票走势图——K线图三(添加均线)

目录 一步一步教你写股票走势图——分时图一&#xff08;概述&#xff09; 一步一步教你写股票走势图——分时图二&#xff08;自定义xy轴&#xff09; 一步一步教你写股票走势图——分时图三&#xff08;对齐图表、自定义柱状图高亮&#xff09; 一步一步教你写股票走势图…

[逐笔数据分析工具分享]如何分析股票逐笔数据

工具分享链接&#xff1a;https://pan.baidu.com/s/1fbDoPM2NzSBEn31gDBZnpQ 提取码&#xff1a;v0sm ​1. 配置stocklist.txt和datelist.txt stocklist为要分析的股票号码&#xff0c;可为任意个 datelist为要分析的日期&#xff0c;可为任意个 以上都为空时&#xff0c;则…

【K线绘图】教你用python绘制带有买卖点的股票K线图(附送鳄鱼指标、顾比均线指标、dataframe格式化输出)

提示&#xff1a;文章内买卖点不构成交易依据&#xff0c;请根据情况自行决策。 教你用python绘制带有买卖点的股票K线图&#xff08;附带鳄鱼指标、顾比均线指标、dataframe格式化输出&#xff09; 前言一、自己绘图&#xff0c;是不是疯了&#xff1f;二、分步说明1. 准备工作…

股票K线图绘制

股票K线图绘制 文章目录 股票K线图绘制前言一、股票K线图基础知识二、用Python绘制股票K线图总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都…

屏幕画笔工具Pointofix,期货/股票复盘分析画线好工具

工具介绍&#xff1a; Pointofix可以将K线图表定格在屏幕某一个画面上&#xff0c;然后可以使用工具趋势线、图形&#xff0c;放大某个细节等&#xff0c;是一款很好的复盘分析画线工具。 Pointofix使用功能&#xff1a; 1.高亮屏幕&#xff1a;手绘笔&#xff1b; 2.直线&…

解决一个信号6问题(sig6,signal6,SIGABRT,double free or corruption (!prev))

我遇到的信号6 99%都是由于数据越界导致&#xff0c;在memcpy的时候没有错误&#xff0c;在free的时候系统报SIGABRT。今天也不例外。代码是我写的&#xff0c;考虑不周&#xff0c;以后拷贝更多加小心。 上图中的data大小为1024&#xff0c;如果memcpy 1025各字节&#xff0c;…

Thread 1:Program received signal:SIGABRT错误之一

引起错误Thread 1:Program received signal:"SIGABRT"的可能情况很多 本文描述的是使用Tab Bar Controller时Tab Bar Item对应的View Controller在Attributes inspector中的NIB NAME与在identity inspector中的class设置的不对应引起的。 如图&#xff08;图片可能…

Thread 1: signal SIGABRT问题解决

解决办法是记住先前的操作&#xff0c;找到相关问题原因&#xff0c;比如控件关联。 如图打开 Show the Connections inspector把相关联的Outlet叉掉&#xff1a; 猜测&#xff1a;Thread 1: signal SIGABRT类型的错误&#xff0c;是某种具体的内部关联引发的错误&#xff0c…

Android异常之SIGABRT

欢迎关注WX公众号&#xff1a; Android开发时出现这样的报错信息&#xff1a; # unknown(29937)SIGABRT #00 pc 0004a124 /system/lib/libc.so (tgkill12) [armeabi-v7a] 2 #01 pc 000478c3 /system/lib/libc.so (pthread_kill34) [armeabi-v7a] 3 #02 pc 0001d525 /system/li…

SIGABRT错误的解决办法

本人原创&#xff0c;转载请注明出处&#xff1a;http://iphone.xiaoxiaostudio.net 在iPhone开发中可能经常会遇到 SIGABRT 错误&#xff0c;我开始也不知道如何调试SIGABRT这个错误&#xff0c;每次都是不断的尝试&#xff0c;最后在stackoverflow找到了方法&#xff0c;整理…

SIGKILL和SIGTERM、SIGINT

如果不对信号处理&#xff0c;就会导致程序退出&#xff0c;但如果程序捕获信号进行处理&#xff0c;按照它的逻辑&#xff0c;它是不一定会退出的。 在这三个信号中&#xff0c;sigkill是不能被捕获的&#xff0c;程序收到这个信号后&#xff0c;一定会退出。这就是kill -9一…

C++ signal信号(SIGHUP、SIGINT、SIGQUIT、SIGILL、SIGTRAP、SIGABRT等等的说明)

转载来自&#xff1a;https://blog.csdn.net/u014470361/article/details/83591513 SIGHUP /* hangup */ ~~~~~~ SIGHUP&#xff0c;hong up &#xff0c;挂断。本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各…

Fatal signal 6 (SIGABRT), code 0 (SI_USER) in tid 2377 (Thread-2), pid 2335

app 运行报错 解决: 选择菜单&#xff1a;File->Settings->Build,Execution,Deployment->Instant Run&#xff0c;将右侧的顶部复选框关闭即可。

linux——signal信号(SIGHUP、SIGINT、SIGQUIT、SIGILL、SIGTR

SIGHUP /* hangup */ SIGHUP&#xff0c;hong up &#xff0c;挂断。本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。 登录Linux时&#xff0c;系统会分配给登录…

linux——signal信号(SIGHUP、SIGINT、SIGQUIT、SIGILL、SIGTRAP、SIGABRT...........................)

SIGHUP /* hangup */ ~~~~~~ SIGHUP&#xff0c;hong up &#xff0c;挂断。本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。 ~~~~~~ 登录Linux时&#xff0c;系统会分配给登录用户…

CANopen DS402 驱动电机运动控制与顺序功能图SFC设计方法

总线型步进电机驱动器 总线型步进电机驱动器是一个总的概括&#xff0c; 物理总线逻辑通信协议RS-485Modbus/RTUCANbusCANopenEthernetEtherNET/IPEtherneteSCL工业以太网PROFINET 其涉及基于RS-485的Modbus/RTU协议、基于CANbus 的 CANopen 协议、 基于 Ethernet 的 Ether…