本章节是根据RecyclerChart的KLine 制作第三章节,底部AttacheChart 成交量图表 Volume的制作,能够看到直接在本来的KLine MainChart下面制作的,用的是第二章最后提及的计划,便是跟MainChart的制作在一个For循环里处理的,所以也不存在两表联动的问题了。但是这个计划可能会有个危险,这个后边提及吧,暂时放一放,直接看gif效果图(没有规划UI的出图,暂且看着吧,哈哈)

基于RecyclerChart的KLine的绘制(三) Volume

这几天习惯了完成功用后,然后随即就开端记录,所以比较随意,以下Volume 完成前列的功用点

底部副图表 成交量图的制作
1. 调整底部 ContentPaddingBottom, 腾出空间制作 
2. 底部 XAxisRenderer 考虑是否独自列出来,调整XAxisLabel. 
3. 创见 底部 attacheYAxis , 实时动态调整max/min, resetYAixsAttache( ), 传到制作的StockChartRender的drawChart() 中去。
4. 制作底部 AttacheChart, Volume图表。
​
待改动:
将ContentPaddingBottom、paddingBottom 从xml中移到 StockAttrs的 default值中去,规范统一化。

创建AttacheChart YAxis

制作图表前,需求给AttcacheChart 前需求给 它框住,所以依靠YAxis的Max/Min值。需求借助 ContentPaddingBottom、paddingBottom值将 制作的区域确认,确认制作区域时,顺便将图表顶部的 desc 文案”成交量:xxx万股” drawText(desc) 制作一下。

Attache YAxis的创建跟 Main YAxis在一个函数里处理了

基于RecyclerChart的KLine的绘制(三) Volume

紧接着便是实时更换Attache YAxis的Max/Min value, 相同跟Main YAxis 放在同一个函数里

基于RecyclerChart的KLine的绘制(三) Volume

Attache Chart制作

按照文章开头那里提到的跟Main Chart 基本上在同一个For循环里处理的,这儿基本上只添加了两个函数的调用,而制作Volume Chart仍是调用本来的drawChart() 函数,仅仅Params中的RectF的相关的坐标需求独自核算,这儿通过ContentPaddingBottom, paddingBottom等去定位YAxis的上下界,上面的Attache YAxis的制作有提及到。

基于RecyclerChart的KLine的绘制(三) Volume

drawAttacheTextAndDivide() 是制作desc 文案的,然后基本上依旧是通过 contentPaddingBottom等去定位位置的

private fun drawAttacheTextAndDivide(canvas: Canvas, parent: RecyclerView, parentStart: Float, parentEnd: Float){
 val yDivideTop = parent.bottom - parent.paddingBottom - mStockAttrs.contentPaddingBottom
 val yDivideBottom = parent.bottom - parent.paddingBottom - mStockAttrs.contentPaddingBottom + 25.dp
 mLineChartPaint.color = mStockAttrs.yAxisLineColor
 mLineChartPaint.strokeWidth = 0.75f
 canvas.drawLine(parentStart, yDivideBottom, parentEnd, yDivideBottom, mLineChartPaint)
 val volumeStr = "成交量:9399万股"
 val txtWidth = mHighLightDescPaint.measureText(volumeStr)
 val rectLeft = parent.left + 5.dpf
 val rectF = RectF(rectLeft, yDivideTop, rectLeft + txtWidth, yDivideBottom)
 val baseY = TextUtil.getTextBaseY(rectF, mHighLightDescPaint)
 mHighLightDescPaint.color = mStockAttrs.xAxisTxtColor
 mHighLightDescPaint.textSize = mStockAttrs.xAxisTxtSize
 canvas.drawText(volumeStr, rectLeft, baseY, mHighLightDescPaint)
}

然后这儿Attache Item RectF的核算独自列了一个函数getAttacheStockRectF()

基于RecyclerChart的KLine的绘制(三) Volume

至此,Volume Chart 的制作到此就结束了,代码 加上 码文花费了大约一上午的时间,整体来说完成起来仍是比较简单的,需求转换了一下思想,不能单单局限在固定的思维里,不过这儿提到后续扩展可能会有些危险,不过目前是能够的。

下次就进入到缩放环节了,缩放限定最大、最小;当缩小到一个limit Level时需求切换 Main Chart到 Line Chart,带有底部Fill. 不过先处理正常的缩放吧,这个更新可能会比较久了,加油,钢巴得。。