首页 > 应用开发 > IT综合 > 搭建婚恋系统源码,实现自定义拖动功能
最近婚恋系统源码中需要实现一个类似于悬浮球的功能,可以自由拖动。 以前通过View的onTouchListener来实现过View的拖动功能,但是通过这种方式的话,需要额外处理Viwe的点击事件(单击事件)。
今天通过 来实现一下View的拖动功能。
拖放框架主要是用于把一个View拖放到另一个View,当启用多窗口模式后,也可以把View从一个应用拖放到另一个应用。可以设置要传递的数据,且在拖动过程中会绘制拖动路径(可以自定义绘制内容)。
可以通过调用View.startDrag或View.startDragAndDrop() (Android N以上)来告知系统开始拖动操作。这两个方法都需要传入4个参数,分别是:
| 参数 | 类型 | 含义 |
|---|---|---|
| clipData | ClipData | 拖放操作要传输的数据 |
| shadowBuilder | DragShadowBuilder | 拖动阴影的构造器 |
| myLocalState | Object | 本地数据,当跨Activity时无法接收 |
| flags | int | 控制拖放操作的标志 |
可以通过View.DragShadowBuilder(View)来使用默认的拖动阴影(与传入的View样式相同),也可以继承View.DragShadowBuilder来实现不同的阴影。
可以通过设置OnDragListener来实时监听拖动事件,在OnDragListener中可以获取到DragEvent,通过DragEvent中的Action可以知道当前拖动事件的操作类型。这些Action包含:
| Action | 含义 |
|---|---|
| ACTION_DRAG_STARTED | 调用了View.startDrag()或View.startDragAndDrop()方法,并获取了DragShadow后,注册了OnDragListener的监听View会接收到此事件操作类型,表示开始拖动。若要接收 ACTION_DROP,则必须返回true。 |
| ACTION_DRAG_ENTERED | DragShadow进入监听View的边界框时,监听View会接收到此事件操作类型。若想要接收后续的 ACTION_DRAG_LOCATION和ACTION_DRAG_EXITED,则必须返回true。 |
| ACTION_DRAG_LOCATION | DragShadow在监听View的边界框内移动时,监听View会接收到此事件操作类型。 |
| ACTION_DRAG_EXITED | DragShadow离开监听View的边界框时,监听View会接收到此事件操作类型。 |
| ACTION_DROP | 在监听View上释放DragShadow时,监听View会接收到此事件操作类型。若成功的处理了释放操作,返回true,反之则返回false |
| ACTION_DRAG_ENDED | 系统结束拖动操作时,监听View会接收到此事件操作类型。此时可以通过调用event.getResult()来获取ACTION_DROP返回的处理结果值。 |
相比于通过onTouchListener方法来说,拖放框架自带了路径绘制,不用通过在拖动过程中持续获取坐标设置到View来显示路径,而且无需额外再处理View的单击事件,方便了许多。
以下是我做的简单实现:
这样,婚恋系统源码就能实现自定义拖动悬浮窗的功能了。
声明:本文由云豹科技转发自ChenYhong博客,如有侵权请联系作者删除
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69982461/viewspace-2847712/ ,如需转载,请注明出处,否则将追究法律责任。