我正在尝试开发自定义启动器应用程序(具有无限数量的主页),我需要像在 Launcher2(android 4.2)中那样实现拖放。
所以我找到了两种方法
1)拖放框架
2) 使用 android launcher2 方式,如实现 DragController、DragSource,如here所述。
但是我很难理解为什么 Android 人没有在他们自己的应用程序中使用他们开发的拖放框架。任何人都可以简要介绍他们的方法背后的可能原理吗?(我的意思是在内存/性能方面)
提前致谢。
与 Launcher 应用程序中使用的框架相比,Android 拖放框架非常基础。
Launcher 应用程序有无数的“层”,拖放发生在这些层之间,即 DragLayer、工作区和所有应用程序视图等。它使用窗口标志并在拖动时动态添加/删除视图到 DragLayer进度和大量活动监控阻力。有关详细信息,请特别查看 DragLayer.java 和 Workspace.java 文件。
Android Launcher 中的拖放操作是在同一 ViewGroup 和同一窗口中作为 Overlay 绘制完成的。但是 android 拖放方法创建了一个完全具有单独窗口类型的单独窗口。
资源和内存明智的标准 android 拖放方法成本更高。
如果性能非常关键,我的建议是按照 Android 启动器的方式进行,否则更喜欢标准的 android 方法,它简单易行。
拖放框架是 sice api 11。我的猜测是,很多启动器的代码是在那之前编写的,还没有时间重构它。但是 api 的工作方式类似于第二种方法。
http://javapapers.com/android/android-drag-and-drop/。这是最好的拖放示例,因为我在我的应用程序中实现了相同的示例。注意:它将仅支持 11 以上的版本。拖放功能将不支持版本 10。相反,您必须通过设置 X 和 Y 位置以绝对布局移动字段。但是绝对布局完全被弃用了......
如果您的应用程序不是那么复杂,您应该使用 WindowManaager 来控制拖放。这很容易实现并且在位置改变时工作。在这里获取代码