(9)Launcher3分析之拖动图标的流程——放下
2014-10-07 09:21
204 查看
我们来看下放下的过程,对应的触摸事件是ACTION_UP,我们直接跳到DragController的onTouchEvent。在处理ACTION_UP的时候多调用了一次handleMoveEvent,可能是因为ACTION_UP相对于上一次的时间也会有位置的变化。
松手的时候会判断是是不是在“扔”图标(通过isFlingingToDelete),如果你用的不仔细的话,可能发现不了这个扔的过程:在说面拖动某个图标,然后快速甩向屏幕上方,就会触发删除的事件。这里检查你是否在扔是通过VelocityTracker来计算的,他会记录每次事件,然后计算出速度,包括X方向和Y方向的。如果不是在“扔”,就会调用放下图标最重要的一个方法,drop方法。
首先他会通过当前的坐标找到需要放到的DropTarget,放下的操作首先得保证有DropTarget,然后DropTarget还得需要接受你手上的图标,比如你把图标拖到已经放满的Hotseat上去肯定不能被接受(DropTarget.acceptDrop返回false)。被接受了就可以调用当前DropTarget的onDrop方法了,我们以Workspace为例,他做了一下几件事:
寻找最近的位置
如果这个位置已经被占用,如果是快捷方式,会在条件满足的时候创建文件夹,结束
如果这个位置已经被占用,如果是文件夹,会在满足条件的时候把图标放入文件夹,结束
如果上面的条件都没有满足,找到一个空位,没找到的话,弹回原来的位置。
如果找到空位,则会改变位置,修改数据库。
生成一个往下放的动画,清除dragView。
上面的过程代码十分繁杂,因为没有对这方面进行过修改和自定义,所以也有很多不清楚的地方。
在drop方法里面,最后还有一个调用,这个调用的是DragSource的方法,DragSource代表着拖动的源头,跟DropTarget正好相反,DragSource的子类也就是Workspace,文件夹,widget列表。onDropCompleted是DragSource最重要的回调,主要做一些善后的操作。
drop()方法执行完毕之后,需要调用DragController.endDrag(),这个方法会把mDragging置为false,清理dragview,调用DragListener的onDragEnd方法。最后释放VelocityTracker,等待下一轮触摸事件的来临。
松手的时候会判断是是不是在“扔”图标(通过isFlingingToDelete),如果你用的不仔细的话,可能发现不了这个扔的过程:在说面拖动某个图标,然后快速甩向屏幕上方,就会触发删除的事件。这里检查你是否在扔是通过VelocityTracker来计算的,他会记录每次事件,然后计算出速度,包括X方向和Y方向的。如果不是在“扔”,就会调用放下图标最重要的一个方法,drop方法。
首先他会通过当前的坐标找到需要放到的DropTarget,放下的操作首先得保证有DropTarget,然后DropTarget还得需要接受你手上的图标,比如你把图标拖到已经放满的Hotseat上去肯定不能被接受(DropTarget.acceptDrop返回false)。被接受了就可以调用当前DropTarget的onDrop方法了,我们以Workspace为例,他做了一下几件事:
寻找最近的位置
如果这个位置已经被占用,如果是快捷方式,会在条件满足的时候创建文件夹,结束
如果这个位置已经被占用,如果是文件夹,会在满足条件的时候把图标放入文件夹,结束
如果上面的条件都没有满足,找到一个空位,没找到的话,弹回原来的位置。
如果找到空位,则会改变位置,修改数据库。
生成一个往下放的动画,清除dragView。
上面的过程代码十分繁杂,因为没有对这方面进行过修改和自定义,所以也有很多不清楚的地方。
在drop方法里面,最后还有一个调用,这个调用的是DragSource的方法,DragSource代表着拖动的源头,跟DropTarget正好相反,DragSource的子类也就是Workspace,文件夹,widget列表。onDropCompleted是DragSource最重要的回调,主要做一些善后的操作。
drop()方法执行完毕之后,需要调用DragController.endDrag(),这个方法会把mDragging置为false,清理dragview,调用DragListener的onDragEnd方法。最后释放VelocityTracker,等待下一轮触摸事件的来临。
相关文章推荐
- (8)Launcher3分析之拖动图标的流程——移动
- (7)Launcher3分析之拖动图标的流程——按下
- Launcher桌面点击&长按&拖动事件处理流程分析
- Launcher桌面点击&长按&拖动事件处理流程分析
- launcher界面点击应用图标启动Activity流程分析
- Launcher里点击一个应用图标的内部流程分析
- Launcher3分析之拖动图标的流程
- Launcher桌面点击&长按&拖动事件处理流程分析 .
- Android中ICS4.0源码Launcher启动流程分析【android源码Launcher系列一】
- Android中ICS4.0源码Launcher启动流程分析【android源码Launcher系列一】
- Android 4.0 Launcher2源码分析——Workspace切换AllApps流程
- Android 4.0 Launcher2源码分析——Workspace切换AllApps流程
- Android 4.0 Launcher2源码分析——Workspace切换AllApps流程
- Android 4.0 Launcher2源码分析——桌面快捷图标的拖拽
- home键及launcher启动流程分析
- android - home键及launcher启动流程分析
- web桌面程序之图标拖动排序的分析
- Android4.0源码Launcher启动流程分析
- Android中ICS4.0源码Launcher启动流程分析【android源码Launcher系列一】
- Android Launcher分析和修改9——Launcher启动APP流程