前言
本文将介绍股票K线图的实现方案,项目名为KLineChart,github地址https://github.com/zengzg/KLineChart。
介绍
K线图一般分为日K、周K、月K,显示的内容有开/收盘价、最高/低价、成交量,额外信息为均线(ma5/10/20)。例如,日K图中就为当日开/收盘价、最高/低价、成交量和5/10/20日均线。K线图支持滑动,滑动过程中,动态改变最高最低价(和成交量);放大缩小可以由两根手指触发,双击也可以放大K线图;节点应该由右向左按时间倒序分布,支持“加载更多”。
无论是日K还是周K、月K显示的内容的模型其实是一样,只是采样周期不同,所以节点可以封装为同一个,名为Entry,包含属性:open、close、high、low、volume、ma5、ma10、ma20。显然K线图会同时显示多个节点,那就封装为EntryData,除了封装有一个节点集合外,还封装了对集合的所有相关操作,比如计算最大最小价、添加节点等。为了方便使用,可以将K线图做成一个自定义控件,并且可以将所有绘制工作封装在一起,名为Renderer,这个控件名当然就叫KLineChart了,由于滑动相关的实现与Android触摸事件处理息息相关,所以就写在KLineChart类中了。
详细设计
我不打算将每行代码都在这篇文章中一一细说,本文就实现中的2个重点作讲解,具体代码大家可以去查看源码。
首先要说的第一点就是绘制Entry。对于Entry的绘制&