【源码剖析】Launcher 8.0 源码 29---用户操作(6)拖拽模式之拖拽的特殊操作

人生三大问题,从哪里来?到哪里去?要干什么?

如果说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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值