典型问题:
当我们在Flex application里用drag and drop时,有一些默认的effects会加给所有的drag and drop操作。比如,如果drag不成功,那么drag proxy files会返回到drag initiator。 但是为什么用同样的代码在AIR 里运行就不会有这些effects。这是因为AIR里,即使指定使用DragManager, drag and drop内部还是会去使用NativeDragManager。
有什么方法可以在不变换代码的情况下,让run as a AIR application和run as a Flex application有同样的effects呢? 因为我们还要求要支持OS 和AIR app之间的拖拽,所以如果完全强制关掉NativeDragManager 去用DragManager 去做所有的拖拽操作,这也是行不通的?
那么我们应该怎么办呢?
解决方案:
在AIR app外,drops是无法获得这些effects的。所以我想最简单一种方法是,我们可以做一个假的proxy image 模拟drag 这个动作,当drag不成功的时候,让这个image飞回到我们窗口里开始拖的那个地方。对程序内部的drops来说,我们可以做的更好一点,因为你可以通过 native drag 的event来知道具体的drop 发生在哪里?所以可以重载 Flex drag manager implementation这个类。那么我们是不是也需要重载 Flex SDK的NativeDragManagerImpl 和IDragManager,怎么去做呢?
如果我们想去重载已经存在的NativeDragManagerImpl,那么我们先需要去preloader里注册它(一旦一个drag manager 被注册后,你就不能再去重载它,所以唯一的去避免默认使用drag manager的办法就是在preloader里先注册,因为它是在你程序initializes之前就运行的)
如下我们做的一个例子,
package hacks
{
import mx.preloaders.DownloadProgressBar;
public class Preloader extends mx.preloaders.DownloadProgressBar
{
import mx.core.Singleton;
import mx.core.WindowedApplication;
import mx.managers.DragManager;
public function Preloader()
{
import hacks.NativeDragManagerImpl;
var placeholder:NativeDragManagerImpl;
Singleton.registerClass("mx.managers::IDragManager", hacks.NativeDragManagerImpl);
DragManager.isDragging;
super();
}
}
}
虽然这样可以运行,但是我们建议你最好不要用同一个code去同时run as AIR app和Flex app,尽量避免重载 NativeDragManagerImpl,因为这个class在很多不同的版本里会有轻微的变化,所以如果你这次修改了它,那么当你使用下一个版本的时候,你还需要再做一遍同样的改动,很麻烦。
--米酒
分享到:
相关推荐
在Android开发中,拖放(Drag and Drop)功能是一种常见的用户交互方式,允许用户通过手势将一个对象从一处移动到另一处。这个功能在许多场景下都非常实用,比如整理应用抽屉、移动文件或者在布局中调整控件位置等。...
"Java中的Drag and Drop拖拽技术" Java中的Drag and Drop拖拽技术是指在Java应用程序中,实现拖拽操作的技术。Drag and Drop技术可以将数据从一个组件拖拽到另一个组件中,实现数据的传输和交互操作。 Drag and ...
在Android开发中,拖放(DragAndDrop)功能是一个常用且有趣的交互方式,它允许用户通过手势将一个视图移动到另一个位置,或者在不同的视图之间传递数据。本示例将详细介绍如何实现一个简单的拖放操作,并解决你在...
在IT行业中,文件拖放(Drag and Drop)是一种常见的用户交互技术,允许用户通过鼠标将一个元素从一处拖动到另一处,常用于文件管理、应用程序界面操作等场景。本资料"DragandDrop.rar_dragAndDrop"聚焦于在Internet...
【标题】"DragAndDrop_Demo源码"是关于C++编程的一个实例,主要展示了拖放(Drag and Drop)功能的实现。在计算机图形用户界面(GUI)开发中,拖放功能允许用户通过鼠标或其他输入设备将一个对象从一处拖动到另一处...
《Drag and Drop Component Suite 3.7:Delphi中的拖放技术详解》 在软件开发过程中,用户界面的易用性和交互性是至关重要的因素之一。"Drag and Drop Component Suite 3.7"是一个专为Delphi开发者设计的组件包,它...
在C#编程中,Drag and Drop操作是一种常见且实用的功能,允许用户通过鼠标将对象从一个位置拖动到另一个位置,比如在不同的控件、窗口甚至应用程序之间移动数据。这个功能在开发桌面应用时,特别是在文件管理或者...
在Windows Presentation Foundation (WPF) 中,鼠标拖放操作(DragAndDrop)是一种常见的用户交互方式,它允许用户通过鼠标将一个元素从一处移动到另一处。这种功能在各种应用程序中都有广泛的应用,例如文件管理器...
Vue DnD Mobile,全称为"Vue Drag and Drop Mobile",是专门为Vue.js开发的一个拖放库,专为移动设备优化,使得在触摸屏上的交互变得更加自然和流畅。 拖放(Drag and Drop,简称DnD)是一种常见的用户交互模式,...
"DragAndDrop_src源码" 是一个专门针对C++编程语言设计的项目,它提供了实现拖放(Drag and Drop)功能的源代码。在Windows应用开发中,拖放操作是常见的用户交互方式,允许用户通过鼠标将一项内容从一处拖动到另一...
对于Delphi开发者来说,"The Drag and Drop Component Suite for Delphi XE10"是一款非常实用的工具,它极大地简化了在Delphi XE10环境下实现拖放功能的复杂度。 该组件套件是基于先前版本XE7的修改版,经过优化后...
表格拖拽排序插件 Table Drag and Drop JQuery plugin v0.7 最新0.7版本
"Drag and Drop Component Suite Version 5.2 Full Source" 是一个专门用于开发具有拖放功能的组件套件的完整源代码版本。这个组件库通常是为了帮助程序员在应用程序中实现更直观、用户友好的交互设计而设计的。在这...
标题 "Ole Drag and Drop Example" 提供了一个关于如何在应用程序中实现OLE拖放操作的示例。在编程中,OLE(Object Linking and Embedding)是微软开发的一种技术,允许不同应用程序之间的数据共享和交互。拖放功能...
HTML5是现代网页开发的重要标准,它引入了许多新特性,其中拖放(Drag and Drop)功能就是一项增强用户交互体验的重要接口。拖放接口允许用户通过鼠标或触控设备将元素从一个位置拖动到另一个位置,使得网页的互动性...
在iOS 11中,Apple引入了一项名为“Drag and Drop”的强大功能,极大地提升了用户在设备上处理和移动内容的便捷性。这个功能允许用户通过简单的手势将内容(如文本、图片、文件等)从一个应用拖动到另一个应用,从而...
本篇文章将深入探讨如何使用jQuery实现拖放(Drag and Drop)功能,特别是针对图片的拖放操作。拖放功能是网页交互中常见的一种增强用户体验的方式,常用于文件上传、页面元素排序等场景。 首先,我们需要引入jQuery...
Shell Drag and Drop for .NET 是一个专为.NET框架设计的组件,它允许开发者在Windows应用程序中实现更加丰富和直观的拖放操作。这个组件的独特之处在于它能够在拖放过程中显示一个图片来呈现拖动的轨迹,提升了用户...
本文将详细介绍Drag and Drop API的基本概念、事件处理、以及如何在JavaScript中使用这个API来实现拖拽功能。 Drag and Drop API为Web应用带来了强大的交互性。通过本文的介绍和示例代码,开发者应该能够理解并实现...
在IT行业中,拖放(Drag-and-Drop)功能是一种常见的用户交互方式,它允许用户通过鼠标操作将元素从一处移动到另一处。在本话题中,我们关注的是如何实现浏览器中的图片预览功能,特别是在拖放操作时。这个功能常见...