【问题标题】:Using Android Drag and Drop framework in My custom Launcher app在我的自定义启动器应用程序中使用 Android 拖放框架
【发布时间】:2013-01-04 21:00:35
【问题描述】:

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

所以我找到了两种方法

1) Drag and Drop framework
2) 使用android launcher2 方式,如实现DragController、DragSource 解释here

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

提前致谢。

【问题讨论】:

  • 嗨,我也找到了这两种方法。这背后有什么原因吗。

标签: android android-layout drag-and-drop


【解决方案1】:

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

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

【讨论】:

  • 你能解释一下无数“层”的机制吗,我在这里问了一个问题:stackoverflow.com/questions/29410875/…
  • 确切地说,我需要像launcher3一样将应用程序添加到主屏幕(工作区)
【解决方案2】:

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

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

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

【讨论】:

  • 你能否解释一下“在同一个 ViewGroup 和同一个窗口中叠加绘图”,我在这里问一个非常相似的问题:stackoverflow.com/questions/29410875/…
  • 签出 ViewGroup.java 中的 dispatchDraw 方法。在您的布局中,只需覆盖方法 dispatchdraw 并在调用 super.dispatchdraw() 后绘制您的视图位图。这会将您的位图呈现在顶部。如果您根据用户触摸位置更改位图绘制位置,您将看到拖动效果。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2018-03-10
        • 2019-05-25
        • 2017-10-27
        • 2010-12-12
        • 1970-01-01
        相关资源
        最近更新 更多