ZPY博客

Activiti7实现流程图自定义高亮颜色

与之前写的一篇文章的操作基本一致

Activiti7实现流程追踪

区别就是默认的颜色和样式使用的是DefaultProcessDiagramGenerator类,而我们如果要自定义高亮颜色则需要重写这个类,但是重写这个类还不够,因为里面还用到了另一个类DefaultProcessDiagramCanvas,所以我们需要重写这两个类。其中颜色定义主要在DefaultProcessDiagramCanvas类中,可以看到其中有一个属性HIGHLIGHT_COLOR定义的值就是Color.RED,也就是红色,默认所有完成节点和当前节点都是红色的框,现在我们想实现的效果是完成的节点框是绿色,当前节点框是红色。

主要实现过程如下:

CustomProcessDiagramCanvas里,定义与HIGHLIGHT_COLOR类似的绿色,包括用到的地方也需要复制一份,比如drawHighLight方法。

CustomProcessDiagramGenerator里,使用上面的CustomProcessDiagramCanvas类,重点来了,主要是修改drawActivity方法,默认里面的逻辑是,如果是需要高亮的节点,那么就调用processDiagramCanvas.drawHighLight方法来把它的框变成红色。现在我们需要做的是在这个地方判断下,如果是当前节点,就用这个方法画红色,如果是已完成节点,就调用我们自己写的画绿色的方法。

那么问题来了,我们如何知道一个节点是已完成节点还是当前节点呢?答案是historicActivityInstance里取得的list中,最后一个节点就是当前节点,前面的节点都是已完成的节点,由于调用高亮方法时需要传一个高亮id的集合,这时我们可以在循环这个list时,如果是当前节点,则把高亮id设为一个另外的标识(之后做判断用),比如为ActivityId + “#”,而已完成节点的高亮id就设为ActivityId。这样在上面提到的drawActivity里就可以判断出是否为已完成节点,从而画不同的颜色了。

如果大家需要CustomProcessDiagramCanvas和CustomProcessDiagramGenerator这两个文件,可以留言。