18

我正在尝试开发自定义启动器应用程序(具有无限数量的主页),我需要像在 Launcher2(android 4.2)中那样实现拖放。

所以我找到了两种方法

1)拖放框架
2) 使用 android launcher2 方式,如实现 DragController、DragSource,如here所述。

但是我很难理解为什么 Android 人没有在他们自己的应用程序中使用他们开发的拖放框架。任何人都可以简要介绍他们的方法背后的可能原理吗?(我的意思是在内存/性能方面)

提前致谢。

4

5 回答 5

3

与 Launcher 应用程序中使用的框架相比,Android 拖放框架非常基础。

Launcher 应用程序有无数的“层”,拖放发生在这些层之间,即 DragLayer、工作区和所有应用程序视图等。它使用窗口标志并在拖动时动态添加/删除视图到 DragLayer进度和大量活动监控阻力。有关详细信息,请特别查看 DragLayer.java 和 Workspace.java 文件。

于 2014-03-20T05:04:54.473 回答
2

Android Launcher 中的拖放操作是在同一 ViewGroup 和同一窗口中作为 Overlay 绘制完成的。但是 android 拖放方法创建了一个完全具有单独窗口类型的单独窗口。

资源和内存明智的标准 android 拖放方法成本更高。

如果性能非常关键,我的建议是按照 Android 启动器的方式进行,否则更喜欢标准的 android 方法,它简单易行。

于 2014-07-21T12:35:58.713 回答
0

拖放框架是 sice api 11。我的猜测是,很多启动器的代码是在那之前编写的,还没有时间重构它。但是 api 的工作方式类似于第二种方法。

于 2013-08-01T10:08:14.780 回答
0

http://javapapers.com/android/android-drag-and-drop/。这是最好的拖放示例,因为我在我的应用程序中实现了相同的示例。注意:它将仅支持 11 以上的版本。拖放功能将不支持版本 10。相反,您必须通过设置 X 和 Y 位置以绝对布局移动字段。但是绝对布局完全被弃用了......

于 2013-12-22T16:16:20.383 回答
0

如果您的应用程序不是那么复杂,您应该使用 WindowManaager 来控制拖放。这很容易实现并且在位置改变时工作。在这里获取代码

于 2014-03-12T09:17:05.390 回答