在 Android开发中自定义控件是一个范围很广的话题,讲起自定义控件,从广度上来划分的话,大体上可以划分为:
- View、ViewGroup的绘制
- 事件分发
- 各种动画效果
- 滚动嵌套机制
- 还有涉及到相关的数学知识等等
本次来讲讲如何实现交易所中的K线图,首先通过一张深度图开始讲解下相关业务需求
深度图一般代表交易所当前买入和卖出的委托量(不是指成交),从这张图我们可以看出X轴代表价格,价格从左往右依次增高,Y轴代表销量,由下往上递增,要绘制出正常的深度图,每次获取的数据至少包含价格和销量,通常的时间,开盘,收盘,高,低价都可忽略。实际开发中这块获取数据使用长链接即可,后台每次返回规定的买入和卖出的数据数量,要先处理后台的返回数据:
- 首先将返回的买入和卖出的数据分开按照价格从低到高排序
- 然后再去处理每个价格对应的委托量,因为返回的当前价格对应的委托量是无法对应深度图的坐标轴,我们需要将按价格排序后,高的价格去加上上一个价格的委托量,这样才可保证委托量的展示是在递增
处理完返回的数据后重新填充数据即可。处理完数据后就要开始处理交互方面了,当用户点击或者长按的时候就要展示当前选中点的相关数据了,从图中可以看到选中的时候有个圆圈以及在X,Y轴上展示了此坐标的价格和委托量。
先上效果图:
由于上传大小的限制,修改了gif的质量,所以效果不是很好。
通过上面的实现效果可以看到做了一点功能上的简化,长按之后我并没有将结果展示在X,Y轴上而是直接显示在中间,不过这些都是次要的,最重要的是理解思路,看了源码后可以根据自己的需求修改。
首先讲下从后台获取到数据的处理,先将数据按价格进行排序,然后通过遍历下集合,将每个bean对象的委托量的数值累加下上一个的然后重新赋值,同时获取买入和卖出的最高和最低价格,后面会用到数据展示
public void setData(List<DepthDataBean> buyData, List<Depth