在自定义 Flex 组件中绘制叠加层

2024-04-27

如何在 Flex 中创建一个自定义 MXML 组件,该组件基于现有组件,但在某些情况下会在该现有组件上绘制覆盖层。

理想情况下,新组件应该基于(派生自)现有组件,以便现有组件的出现可以用新组件替换。

我尝试在新组件中重写 updateDisplayList() 并使用 this.graphics 绘制覆盖层。这导致覆盖层被绘制在现有组件的子组件下方。我还尝试在收到渲染事件时进行绘图,这会导致类似的结果。

当触发叠加层显示的外部条件发生变化时,我会在新组件上调用 invalidateDisplayList() 。这可以触发上述两种情况的绘图。剩下的问题似乎是弄清楚如何在添加所有其他组件后在它们之上进行绘制。

下面的例子应该说明我试图做的事情;当设置了 overrideEnabled 并调用了组件的 invalidateDisplayList() 方法时,红色矩形将在背景中绘制......

// NewComponent.mxml
<ExistingComponent ...>
    <mx:Script>
    ...

        public var overlayEnabled:Boolean;

        override protected updateDisplayList(...) {
            super.updateDisplayList(...)
            if (overlayEnabled) {
                var g:Graphics = this.graphics;     
                g.beginFill(0xFF0000, 0.5);
                g.drawRect(0, 0, width, height);
                g.endFill();
            }
        }
    ...
    </mx:Script>
</ExistingComponent>

另外,请随意提出不同的方法。


你必须添加一个DisplayObject当您致电时为您叠加并投保updateDisplayList它位于另一个的顶部。

        public var overlayEnabled:Boolean;

        public overlayHolder:(whatever display object you want to use)

        override protected updateDisplayList(...) {
            super.updateDisplayList(...)
            if (overlayEnabled) {
                if (overlayHolder.parent != this){
                 addChild(overlayHolder);
                } else {
                  if (numChildren > 0)
                     setChildIndex(overlayHolder, numChildren-1);
                }
                var g:Graphics = overlayHolder.graphics;     
                g.beginFill(0xFF0000, 0.5);
                g.drawRect(0, 0, width, height);
                g.endFill();
            } else if (overlayHolder.parent == this) {
              removeChild(overlayHolder);
            }
        }

Edit:可用于将叠加层添加到显示列表的一个属性是rawchildren http://livedocs.adobe.com/flex/3/langref/mx/core/Container.html#rawChildren:

package {
    import flash.display.Graphics;
    import flash.display.Sprite;

    import mx.containers.VBox;

    public class MyVBox extends VBox {
        public var overlayEnabled : Boolean = true;
        public var overlay : Sprite = new Sprite();

        public function MyVBox() {
            super();
        }

        protected override function updateDisplayList(unscaledWidth : Number, unscaledHeight : Number) : void {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            if (overlayEnabled) {
                if (overlay.parent != this) {
                    rawChildren.addChild(overlay);
                } else {
                    if (rawChildren.numChildren > 0)
                        rawChildren.setChildIndex(overlay, rawChildren.numChildren - 1);
                }
                var g : Graphics = overlay.graphics;
                g.beginFill(0xFF0000, 0.5);
                g.drawRect(0, 0, width, height);
                g.endFill();
            } else if (overlay.parent == this) {
                rawChildren.removeChild(overlay);
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在自定义 Flex 组件中绘制叠加层 的相关文章

  • 如何使用 Spring Security 保护混合 Spring MVC + Flex 应用程序

    我尝试在 Spring 论坛上询问这个问题 http forum springsource org showthread php 109948 Problem configuring spring security 3 1 with hyb
  • 在 Flex SDK 上叠加 AIR SDK 后出现问题

    我尝试在 Windows 计算机上将 AIR SDK 覆盖到 Flex SDK 上 但之后遇到问题 我尝试覆盖两个 SDK 的多个官方版本 包括 Apache Flex SDK 并按照此处提到的步骤进行操作 http helpx adobe
  • 如何在flex中绘制虚线

    经过一番搜索和阅读 Graphics 类文档后 我找不到指定线条的线条样式的方法 我的意思是这条线是实线还是虚线 有人可以帮助我吗 Thanks 无论如何 您不能仅仅通过使用 Flex 库类 当然 你也可以自己做 这是一个实现它的类 根据找
  • 需要澄清应用程序域

    我需要对这个主题进行一些澄清 因为我刚刚遇到将 swf 加载到重用加载器对象中的问题 假设我有 3 个 SWF 主文件 swfchildA swfchildB swf Main swf 中有一个可重用的加载程序对象 myloader loa
  • 用圆形减去(遮盖掉?)路径

    我正在使用 Spark Path 在 Flex 中绘制一条路径 我想从这条路径中减去一个圆形 如下图所示 道路又黑又宽 有任何想法吗 我尝试使用 Shape 对象创建蒙版 但无法完全创建其中有圆孔的蒙版 找到了 不涉及口罩 我拿了Path并
  • 在 Flex 选项卡式视图导航器之间切换

    我正在开发 FlexTabbedViewNavigatorApplication具有三个选项卡 ViewNavigator 元素 我想根据用户操作 通过 ActionScript 代码 从一个 ViewNavigator 切换到另一个 Vi
  • Flex 垂直数据网格

    我可以有一个垂直而不是水平显示数据的数据网格吗 例如 如果这是我的数据提供者 array firstname John lastname Doe array firstname Jack lastname Jill 我希望数据显示如下 Fi
  • 弹性图表隐藏数据提示

    我们从多个源获取数据 并且某个日期的数据可能存在也可能不存在 因此 对于没有数据的点 我们发送 NaN 问题 在下面的代码中 有没有办法不显示那些为空的数据提示 我添加了一个数据提示功能 但它确实显示了一个小的空方块 是否有可能甚至不显示
  • 带有行号列的 Flex DataGrid

    我想扩展 DataGrid 组件 以便有一个 只读 列用于显示行号 就像您在电子表格中看到的那样 我看到这篇文章http www cflex net showFileDetails cfm ObjectID 735 http www cfl
  • 舞台强制渲染/重绘

    通常我会监听 ENTER FRAME 事件并在每次渲染帧时执行代码 但是对于我的应用程序来说这太慢了 2 个 ENTER FRAME 事件之间的时间间隔为 40 毫秒 如果我改变帧率也没关系 那么是否可以在不监听事件的情况下强制Flash重
  • Flex 中的数组与 ArrayCollection

    谁能解释一下 Flex 中 Array 和 ArrayCollection 之间的区别吗 根据 liveDocs ArrayCollection 类是一个包装器 将数组公开为的类 可以访问的集合以及 使用方法和操作 ICollectionV
  • (简单)Flex 3 应用程序需要什么版本的 Flash 播放器?

    Flex 3 应用程序需要什么版本的 Flash 播放器 要求似乎是FLEX开发环境中的HTML WRAPPER ACTIONSCRIPT编译器设置 我可以在那里选择什么来最大程度地兼容旧的 Flash 播放器 v8 播放器可以工作吗 Fl
  • 为什么 swfloader 不工作?

    我正在尝试使用 mxml swfloader 组件从以下 url 加载外部 Flash 但它不加载任何内容 我正在使用 FlashBuilder 4 5 http somesite com en interface swf token 12
  • OpenLaszlo 终止加载的 Flex 应用程序的一些鼠标事件

    这是一个关于 OpenLaszlo 或者更确切地说 Flex 内部结构的问题 我能够将完整的 Flex 应用程序 swf 加载到 OpenLaszlo 中 主干版本 旧版本失败 它适用于 Flash 10 和 11 但 OpenLaszlo
  • As3 Graph API 注销

    我正在开发一个由不同用户玩的应用程序 但我使用 as3 graph api 来验证用户身份并在他们的墙上发布 并且我需要在下一个用户在 as3 graph 上开始会话之前注销每个用户应用程序编程接口 http code google com
  • Flex 中的单例类

    我有一个疑问 您如何在 Flex 中创建 Singleton 类 是否有任何约定 例如类名应该是 Singleton 或者它应该扩展另一个类 一个项目可以有多少个 Singleton 类 谁能说一下Singleton类的实时使用情况吗 我计
  • 将图像保存在 applicationStorageDirectory 的目录中

    我试图将图像文件保存到我的空气项目的应用程序存储目录中的目录中 首先创建目录 var imageDirectory File File applicationStorageDirectory resolvePath vispics if i
  • 如何保证popUp始终显示在PopUpButton上方?有测试用例和截图

    我的 Flex 4 6 Web 应用程序的少数用户抱怨它右下角的 mx controls PopUpButton 有时会打开一个列表下它因此无法使用 我自己无法重现它 可能是他们的 Flash 播放器和 或字体大小设置的不幸组合 我如何确保
  • 在 Flex 中以 HTTP Post 方式上传任意数据

    我们目前有一个 Java 小程序 可以生成大量数据并将其上传到我们的服务器 我们拥有的上传方法之一是使用 HTTP POST 到我们的服务器 其内容只是原始数据 没有多部分编码或任何内容 我正在考虑实现一个具有相同功能的 Flex 应用程序
  • Flex 相当于 Google Visualization Geomap(等值线地图)?

    The 谷歌可视化地理地图 http code google com apis visualization documentation gallery geomap html Overview组件是一个等值线地图 http en wikip

随机推荐

  • 更改 botframework Formflow 中的确认选项

    我在 botframework 中创建了一个表单流 我想更改确认选项 默认情况下需要 是 和 否 但我希望它继续进行 而不是 是 即使用户输入 确定 是 是 等 我如何添加确认选项 您需要将新条款添加到YesFormBuilder 配置的数
  • 在 Debian 上安装 PostGis 时出现错误“找不到 PGXS Makefile”

    我正在 Debian 机器上通过 psql 安装 PostGis 实际上是 crunchbang 我已完成以下步骤 wget http download osgeo org postgis source postgis 2 0 3 tar
  • Facebook JS SDK:登录弹出窗口之前检查权限

    我想在提供 iframe 登录以请求扩展权限之前检查登录用户的权限 但 iframe 弹出窗口被浏览器阻止 ff chrome 测试 我想避免这种情况 而且我很确定这是因为 js 函数的结果是 嵌套的 我的 js 聪明程度有限 所以请原谅
  • RestKit 对象与外键的映射关系

    RestKit 是否可以在不将外键存储为属性的情况下连接关系 即直接从 JSON 中的键路径存储 特别是 我有一个 Job has many Rooms 关系 房间的 JSON 不包含作业 而是分别加载 job id 1 name John
  • 如何防止已删除的软件包在 Julia 中更新?

    该问题的标题乍一看可能令人困惑 但它是有效的 我安装了Makie jl不久前打包 然后使用成功删除它pkg gt rm Makie 今天我尝试使用以下命令更新所有软件包 如果有的话 pkg gt up 但我得到了一个令人兴奋的日志 Inst
  • fopen 或 file_get_contents 更快?

    我正在运行多个流量较高的网站 根据要求 所有图像均通过下载image php id IMAGE ID HERE 如果您以前曾经这样做过 您就会知道该文件将读取文件图像并使用特殊标头将其回显到浏览器 我的问题是 服务器上的负载非常高 150
  • 如何显示由 setTimeout/setInterval 生成的每个正在运行的线程的列表

    我想通过纯 javascript 或浏览器中的任何类型的控制台或其他方式来完成此操作 是否可以 Thanks 进一步说明 我想调试一个执行动画的库 我想知道如果有多个对象被动画化 是否会创建多个计时器 注意setTimeout 不会产生新线
  • Git:确定分支是否处于合并冲突状态

    我正在编写一个 bash 脚本来进行一些自动化操作 该脚本的一部分涉及导航到本地存储库 切换到本地 master 分支 然后拉取远程 master 以使用最新代码更新本地 master 分支 有谁知道是否有一种方法可以以编程方式确定拉取是否
  • 哪个运算符更快:!= 或 >

    哪个运算符更快 gt or 示例 我想针对 1 测试一个值 可以为正值或 1 if time gt 1 or if time 1 时间的类型为 int 标准没说 因此 这取决于给定编译器在给定版本中生成哪些操作码 以及给定 CPU 执行它们
  • dplyr 在动物园对象中发生变异

    我试图应用dplyr mutate in zoo目的 但是 它产生了一个错误 Error in UseMethod mutate no applicable method for mutate applied to an object of
  • 如果设备关闭,尝试在 IOS 应用程序中检索之前配对的蓝牙设备将不会响应失败

    很抱歉标题很长 但我们在使用 iOS 版 corebluetooth 时遇到了一个非常有趣的问题 我们正在 CBCentralManager 中发出对retrievePeripherals 的调用 并且能够找到之前配对的设备 不管设备是打开
  • Firebase 重置密码 Swift [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道你们是否可以向我展示如何在 Swift 中设置重置密码 我目前正在使用 Firebase 作为我的后端服务 我只需要代码 答案
  • 用于列表和映射的 C++ 容器

    我们有一个键和值对的集合 我们需要一个容器 它可以帮助我们检索值 o 1 但也可以记住插入顺序 以便当我们进行迭代时 我们可以像插入顺序一样进行迭代 由于键是一个字符串 我们将无法使用集合或类似的结构 目前我们已经定义了自己的集合类 其中包
  • 链表、数组和硬件内存缓存

    虽然之前有人问过关于链表与数组的问题 但答案大多归结为我们大多数人在某些时候可能已经学到的东西 列表擅长插入和删除 数组擅长随机访问 现在 像 Bjarne Stroustrup 这样受人尊敬的人已经argued https www you
  • Flutter IOS 使用连接或 wifi 插件读取 wifi 名称

    这个问题是类似的这个问题 https stackoverflow com questions 52498906 how to get the wifi namessid of the currently connected wifi in
  • 是否可以有效地计算 lambda 演算项?

    我最近用 lambda 演算编写了很多程序 我希望能够实时运行其中一些程序 然而 尽管趋势函数范式基于 lambda 演算和 B 约简规则 但我找不到一个不是玩具 不以效率为目的的评估器 函数式语言应该很快 但我所知道的那些语言实际上并不提
  • Android 6.0如何隐藏导航栏?

    我有以下代码 getWindow getDecorView setSystemUiVisibility View SYSTEM UI FLAG LAYOUT STABLE View SYSTEM UI FLAG LAYOUT HIDE NA
  • 定制 NET MAUI 启动画面

    我正在尝试制作闪屏 Net毛伊岛包含渐变背景和动画徽标 我看过有关如何制作简单的飞溅的教程
  • 如何在代码中设置控件模板?

    我在 XAML 中有这个
  • 在自定义 Flex 组件中绘制叠加层

    如何在 Flex 中创建一个自定义 MXML 组件 该组件基于现有组件 但在某些情况下会在该现有组件上绘制覆盖层 理想情况下 新组件应该基于 派生自 现有组件 以便现有组件的出现可以用新组件替换 我尝试在新组件中重写 updateDispl