最近,小弟在实现一个思维导图的开源控件。下面我简单介绍一下如下打造一个类似思维导图软件的ViewGroup。
基本结构.png
建立模型
主要模型结构相对简单:TreeModel,NoteModel,NoteView,TreeView。
核心实现分布如下:
TreeModel:树形结构的存储,树形结构的遍历,添加、删除节点;
NoteModel:节点关联的指向,和Parent的指向;
TreeView :绘制树形结构,对树形结构位置的纠正,实现View层的添加,删除,note关联绘制;
NoteView:显示text;
编写位置计算核心代码
在核心代码中,我想和大家分享的是TreeView如何对多种Style(树形形状)进行适配的问题。因为我们的树形结构的表达多种的,有的是一个半树形图,有点是圆形展开的等。对于这个问题,作为程序员如何进行解耦能,采用Interface进行解构适配,统一行为。所以在这里我写了一个TreeLayoutManager进行管理树形的位置表达。这里我实现了一个RightTreeLayoutManager。代码概况如下:
接口
public interface TreeLayoutManager {
/**
* 进行树形结构的位置计算
*/
void onTreeLayout(TreeView treeView);
/**
* 位置分布好后的回调,用于确认ViewGroup的大小
*/
ViewBox onTreeLayoutCallBack();
/**
* 修正位置
*
* @param treeView
* @param next
*/
void correctLayout(TreeView treeView, NodeView next);
}
实现
public class RightTreeLayoutManager implements TreeLayoutManager{