声明:本文MPChart 代表的便是 MPAndroidChart。

本章节继续前次的自界说制作,不同之前的图形, 日历下边的睡觉泳道图,每个item不同于之前的图形,会平等的width, 相反的是平等的高度的矩形,不等的宽度,便是所占X轴的比重不相同,见1.1睡觉泳道图。

1.0 睡觉泳道图

首先跳出MPChart自界说这层概念,我们来制作这个图形,本身来说还是蛮简略的,制作四种不同的Rect,

根据不同的type 以及不同的X轴占比,两个要素就可以将这个图形确认下来, 其实本身也便是如此,将这两个变量要素存入到之前介绍的BarEntry中,这里界说为SleepItemEntry, 确认宽度的 变量,分红startTime, endTime, itemDuration = endTime – startTime。 将所有的睡觉数据转化成 Entry之后,依照之前章节介绍的逻辑,存入DataSet中,经过Buffer feed() 办法之后,形成Buffer 数组, 接着经过 Transformer 将buffer中的数据转为屏幕像素点,Render从buffer里同以往相同无差别取数据,每次取4个制作Rect, 整个制作完结。

  • SleepItemEntry

MPChart自定义睡眠泳道图

图1.1 SleepItemEntry

SleepItemEntry中保存了 type, 将改时间段的时间消耗变量存在 SleepItemTime中。

MPChart自定义睡眠泳道图

图1.2 SleepItemTime 属性

  • SleepBuffer

SleepBuffer 担任将上面的SleepItemEntry数据存入到Buffer数据中去,逻辑在 override的feed() 办法里完成,依次处理DataSet中的Entry,然后经过 addBar(left, top, right, bottom); 存入到 Buffer中去。

MPChart自定义睡眠泳道图

图1.3 SleepBuffer数据处理

addBar() 为父类 BarBuffer中的办法,将数据存入buffer中去。

protected void addBar(float left, float top, float right, float bottom) {
    buffer[index++] = left;
    buffer[index++] = top;
    buffer[index++] = right;
    buffer[index++] = bottom;
}
  • SleepRender

准备好SleepBuffer的数据之后,只需自界说自己的Render,然后就可以拿Buffer中的数据进行制作了,将制作逻辑放在override onDrawDataSet() 办法中,仍旧可以看见Transformer 里的转化Buffer数据的逻辑,里边还包含了鸿沟判断,RTL判断等其它的相关处理。

MPChart自定义睡眠泳道图

图1.4 SleepRender制作泳道图

Okay, 至此泳道图的制作告一段落,整体比较而言比较简略,但是仍旧走了一遍MPChart自界说的逻辑,不同惯例的制作逻辑,Item的宽度,高度跟以前的不太相同。

下一章节我们介绍 LineChart,以及XAxis、YAxis的自界说逻辑,以及YAxis revert的情况下,配速图表的制作,敬请期待!!

\