包含不可拖动按钮的可拖动菜单与 AIR
Posted
技术标签:
【中文标题】包含不可拖动按钮的可拖动菜单与 AIR【英文标题】:Draggable menu containing non-draggable buttons with AIR 【发布时间】:2013-11-26 19:40:12 【问题描述】:首先,对于 Flash 和 AS3,我还是个新手。
我正在尝试为移动应用创建一个包含 12 个按钮的 displayObject。由于有十二个按钮都将打开到单独的菜单中,因此它们显然都不适合移动设备的屏幕。这就是为什么我希望在一个显示对象上拥有所有按钮,这些按钮可以上下拖动以显示当前未显示在屏幕上的按钮。
我在尝试此操作时遇到了许多问题。 1)如果我使包含按钮的对象可拖动,它位于按钮后面,我无法通过按钮单击它以拖动它(除非我遇到没有任何按钮的最佳位置,但这不是' t 对用户有效)。
2) 如果我将包含按钮的对象设为可拖动并将其放在按钮前面,则我无法单击按钮以打开菜单并访问其中包含的内容。
3) 出于某种原因,当我不希望它们成为时,所有按钮都可以单独拖动。例如,我单击屏幕上的任意位置(无论 touchID 点是否在按钮上)以移动整个按钮列表,如果我碰巧单击了一个按钮,那么它不会移动整个列表,而是移动那个按钮。
所以这里的主要问题是“我如何创建一个按钮列表并使用拖动方法(例如手机上的设置菜单)滚动列表而不将按钮彼此分开。”所以包含的显示对象是可拖动的,按钮是可点击的。
一个名叫格伦的人在他的例子中做得很好:http://rabidgadfly.com/2010/03/as3-clickable-button-inside-a-draggable-movie-clip/
但是,如果您单击他示例中的黄色按钮,则可以将其拖出灰色框。我希望我的按钮相对于灰色框保持静止。因此,您可以移动灰色框,但黄色按钮仍保留在框内的相同位置,但您不能在框内拖动按钮。
【问题讨论】:
【参考方案1】:我不熟悉智能手机的加速度计事件,但我确实知道如何使用常规 actionscript 3 侦听器解决此问题。 (您可以将这些转换为智能手机听众使用的任何内容)
想到的一个解决方案是在整个可拖动框上设置一个鼠标按下监听器和一个鼠标按下监听器。当鼠标按下事件触发时,您会启动一个计时器以在大约四分之一秒内关闭,然后您会设置一个触发每一帧的输入帧(或基于计时器的)函数。这将更新与当前鼠标位置相对应的每一帧的整个框的位置(您的拖动框效果),并且当鼠标向上侦听器触发时,它会停止拖动(此时,如果鼠标向上,则用户不在完全触摸屏幕)。
还为每个按钮添加鼠标单击侦听器。这样,在四分之一秒的计时器中,您知道如果用户只是想点击一个按钮,那么他们就会点击,在鼠标按下和鼠标向上事件之间留下不到四分之一秒的时间(这样拖动从不启动),并且仅单击该按钮。如果用户按住鼠标超过四分之一秒,那么您知道他们一定是在尝试拖动整个东西。
这似乎是区分想要拖动框的用户和想要点击框内按钮的用户的唯一方法。
显然它不必是一刻钟,它可以是你想要的任何时间长度,甚至可能根本就没有时间,但是当人们只想点击按钮并在单击时意外滑动。
如果您有任何疑问或问题,请发表评论,我会尽力提供帮助。
【讨论】:
以上是关于包含不可拖动按钮的可拖动菜单与 AIR的主要内容,如果未能解决你的问题,请参考以下文章
在WORD里拖动鼠标滑轮,页面不上上下走,而是放大缩小,怎么回事?