仿 Hola圆桌面 Launcher 定制 滑动文件夹 之 拖动分析
好久没写博客。还是习惯写思路。思路最重要。
Launcher的拖动无非就是一个DragController说简单也简单,说复杂有时候也挺复杂的,以下简单的说下自己的理解。说得有错的地方大家可以指出来。
DragSource 拖动源头,顾名思义,就是从哪里拖进来的。比如从 workspace --->folder, 从foler --->workspace ,从 folder--> deleteTagter 等 。就是从哪里到哪里,前面那个哪里,就是DragSource。
DropTarget 同理,拖动的目的。
DragController.DragListener 拖动的监听。哪里用到他呢。 比如拖动删除。他就要实现这个 监听,当长按的时候,就让屏幕最顶部出现 删除的XX。或者获取焦点等。
比如我们现在要实现一个,Viewpage带 文件夹,里面可以拖动,可以排序可以删除,可以从文件夹拖动 到 一个 ButtonDropTarget等。
那我们来分析下:
1、图标在文件夹内,又可以拖动到文件夹内。 所以我们这个文件夹必须实现 2个接口。 DragSource 、DropTarget
2、是不是也要实现 长按监听 和点击监听 View.OnClickListenerView.OnLongClickListener
3、文件夹内又要实现左右滑动 VIewpage
4、每个文件夹个是不是也要嵌套在 VIewPage(注明里面需要解决各种冲突。不然滑动不了。事件的分发拦截消耗)
5、每个Foler最好是 ScrollView嵌套 CellLayout ,当然 也可以是个其他布局,重写。Scroll Help 滑动工具实现这个 滑动。阻尼。
6、添加到DragLayout 拖动层的 下一层。
当然整个过程到文件夹可以拖动流程,滑动流畅,还需要大家自己摸索。整个文件夹过程实现,确实比较复杂。要完整的实现出来没有对嵌套布局冲突,还有Launcher有一定的了解,很难去坚持下了。我在实现整个文件夹实现整整花了2-3个礼拜。