人生三大问题,从哪里来?到哪里去?要干什么?
如果说dragListener主要关注的是从哪里来。那么DropTarget 则回答了到哪里去。
应用可能拖到想放下的地方,可能拖到删除的选项,可能拖到了没有空位的页面。不同的结果由DropTarget 以及相关的一些类和对象来处理。
DropTarget 一个接口,其源码如下:
public interface DropTarget {
class DragObject {
public int x = -1;
public int y = -1;
public int xOffset = -1;
public int yOffset = -1;
public boolean dragComplete = false;
public DragView dragView = null;
public ItemInfo dragInfo = null;
public ItemInfo originalDragInfo = null;
public DragSource dragSource = null;
public boolean accessibleDrag;
public Runnable postAnimationRunnable = null;
public boolean cancelled = false;
public boolean deferDragViewCleanupPostAnimation = true;
public DragViewStateAnnouncer stateAnnouncer;
public DragObject() {
}
public final float[] getVisualCenter(float[] recycle) {
final float res[] = (recycle == null) ? new float[2] : recycle;
int left = x - xOffset;
int top = y - yOffset;
res[0] = left + dragView.getDragRegion().width() / 2;
res[1] = top + dragView.getDragRegion().height() / 2;
return res;
}
}
boolean isDropEnabled();
void onDrop(DragObject dragObject);
void onDragEnter(DragObject dragObject);
void onDragOver(DragObject dragObject);
void onDragExit(DragObject dragObject);
boolean acceptDrop(DragObject dragObject);
void prepareAccessibilityDrop();
void getHitRectRelativeToDragLayer(Rect outRect);
}
此接口重点关注以下4个方法:
void onDrop(DragObject dragObject); 松手后
void onDragEnter(DragObject dragObject); 刚到目标
void onDragOver(DragObject dragObject);在目标上面移动
void onDragExit(DragObject dragObject);离开目标
实现这接口的有workspace、folder、buttonTargetBar
首先看folder。
比如,将图标拖动到文件夹里面,则是onDragEnt