Android源码学习 -- launcher 3 拖动大略流程之终章

前面的不用看了,就看下面几张图就可以知道大概的流程了
引用图片
Android源码学习 -- launcher 3 拖动大略流程之终章_第1张图片

落下时的动画在DragLayout 的animateView方法中: 箭头方向要反着看
Android源码学习 -- launcher 3 拖动大略流程之终章_第2张图片

根据 onDriverDragEnd()方法追溯 :

Android源码学习 -- launcher 3 拖动大略流程之终章_第3张图片
onDriverDragEnd() 等方法 与 Workspace的onDrop()方法之间的流程:
Android源码学习 -- launcher 3 拖动大略流程之终章_第4张图片
onDriverDragEnd() 等方法 与 Workspace的onDrop()方法之间的流程:
Android源码学习 -- launcher 3 拖动大略流程之终章_第5张图片
上面都是拖拽的流程,如果仅仅是长按不动呢 ?Android源码学习 -- launcher 3 拖动大略流程之终章_第6张图片
大多数的方法调用的源头都是 DragController中对操作进度进行管理,而DragController对象的创建是在Launcher的onCreate方法中 在对 Workspace 和 DragLayout进行初始化之后,将DragController对象 通过setup方法传入Workspace 和 DragLayout中 .

对图标的拖拽主要是通过 DragLayout 的onTouchEvent和 onInterceptTouchEvent方法中对MOVE,UP,CANCEL事件的监听,也就是事件分发机制进行处理

拖拽卸载 :

DropTarget 定义可接收拖动的对象的接口。
DropTargetBar(获取搜索/删除/卸载栏)
在Workspace的addInScreen方法中 把 都传入DragController ArrayList中
DropTargetBar(获取搜索/删除/卸载栏) 则在Launcher的setupViews 方法中把自身的子view都传入到 DragController ArrayList 中

DropTargetBar与其子view,Workspace,Folder 都实现了 DropTarget 接口 ,DropTarget 接口 的作用就是定义可接收拖动的对象.所以我们对图标拖拽结束时 , 图标会根据坐标判断 要落入文件夹 或者 DropTargetBar,亦或者是Workspace(显示图标和widget的主体)

DropTargetBar : 在launcher的布局中负责展示 搜索/删除/卸载栏 , 内部包含了部分特殊功能的子view,当我们判断拖拽结束时 对象 由 子view之一 DeleteDropTarget 接收时,我们就会弹窗对用户进行提醒是否卸载.

DragController 中的 findDropTarget 方法就是根据当前的坐标找到图标悬停的 实现DropTarget接口的view上面

  • 拖拽卸载就是因为 展示图标的dragView 被拖拽到 DropTargetBar 中卸载的子view上了

你可能感兴趣的:(Android源码阅读)