Android Launcher构建之拖拽初步

本文介绍了Android Launcher中拖拽操作的重要性和实现原理。详细解析了Android拖放框架,包括拖放模型、拖放过程的四个步骤:启动、持续拖动、放下和结束。通过对startDrag方法的分析,阐述了如何启动拖放以及拖放过程中各个阶段的关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        拖拽在launcher中地位十分重要,因为界面的修改都是通过拖拽来实现的。先看看Android2.3到android4.1代码树的共同部分,接下来翻译Android关于拖拽的介绍,毕竟他们才是最有发言权的。


Android4.1  Launcher源码列表


Android2.3与Android4.1 Launcher同名文件列表

虽然文件数量增加不少,但基本的模型与拖拽相关目录却依旧。


拖放模型介绍

             

            With the Android drag/drop framework, you can allow your users to move data from one View to another View in the current layout using a graphical drag and drop gesture. The framework includes a drag event class, drag listeners, and helper methods and classes.

             在Android的拖放框架中,允许用户通过拖放的方式把数据从一个view移动到另一个view中。并且提供了DragEvent、View.OnDragListener、辅助方法与类进行支持。


拖放过程介绍

          

           主要四步走,先看最重要的准备接口,该接口位于View类并定义为:public final boolean startDrag (ClipData data, View.DragShadowBuilder shadowBuilder, Object myLocalState, int flags)

参数:

data ClipData   结构指针,表示剪切的内容。

shadowBuilder View.DragShadowBuilder  结构指针,指向拖放过程中跟随移动的图片。

myLocalState 当前位置状态信息结构体,由自己定义。但他将被系统打包到DragEvent 内部,用于监听器收到拖放数据时根据状态设定进行不同的处理。

flags 预留标志位,当前未使用,需要置零。

返回值:用于表示能否正常启动拖放,因此需要重点关注。

         整个拖放过程如果要给他定义一种设计模式,发现行为模式中却木有。于是我给他定义为分房模式,下面就是传说中的分房四部曲:

1.启动:一般通过长按启动拖拽,并于应用中调用startDrag( )方法,即在View的 onLongClick方法中调用。注意startDrag参数的填充,因为这些参数要给拖拽框架与接收者使用。调用startDrag( )(贴告示曰:要分房啦!)后系统响应顺序:

首先显示拖拽图标,即将shadowBuilder指定的图标显示到界面。(放出房子图,并悬停于空中)

接下来给位于当前布局树下的所有View监听器发 ACTION_DRAG_STARTED消息。(所有登记过的都收到了开始分房的通知)

监听器执行相关动作代码,如根据需要高亮当前View或高亮目标View。(有时需要给房子或部分目标群体一些灯光特写)

监听器返回结果,如果为true表示将继续接收,如果为false,那么它将不会再收到拖放信息。(收到通知后你得回复,如果放弃后面就没你什么事了)

2.持续拖动:拖放图标跟随手指移动,并不断监听是否移出当前view区域,或移入其他View区域。同时根据情况决定是否对移入移出状态进行指示。(开发商拿着房子在大家头顶转呀转,经过你的头顶还给你点灯光,但别高兴得太早)

3.放下:用户放下图标,发 ACTION_DROP给当前view。如果用户放下位置无监听,那么系统将不会发送ACTION_DROP事件。当监听器收到ACTION_DROP事件时,表示目的地为自己的区域,于是调用getClipData()取出ClipData数据,并使用或备用。(终于放下了,但有可能放到大家都看不到的地方,如果你收到了房子,那么你别忘了拿走钥匙、房产证等)

4.结束:发 ACTION_DRAG_ENDED给全部监听器。(让大家都回家休息吧,这一轮分XX房结束了)


其他的细节就不再分析了,有了这些内幕已经足够了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值