在自定义 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 组件中绘制叠加层 的相关文章

  • 如何分别从每个父节点获取子节点?

    我有一些数据 Xml
  • Delphi 视觉组件 - 远离 TFrame 基础? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在动作脚本 3 flex 4 中使用 DisplayObject(Group ,UIComponent) 剪切复制粘贴

    我正在我的应用程序中实现剪切复制粘贴 例如cacoo http www cacoo com 但我在这些操作过程中遇到问题 我正在使用剪切复制粘贴背后的想法 var className String getQualifiedClassName
  • 如何查看eclipse“运行配置”使用的shell命令

    给定 Eclipse 中的 运行配置 我想打印出用于运行它的关联 shell 命令 例如 现在 在 Eclipse 中 如果我单击 播放 它将运行 mvn assembly directory Dmaven test skip true 我
  • 从 Flash 或纯 AS3 项目使用 RemoteObject (AMF)

    我最近将一些代码从 Flex 项目移植到新的纯 AS3 项目 当我尝试进行 AMF 调用时 收到如下错误消息 TypeError 错误 1034 类型强制失败 无法将 Object 5425371 转换为 mx messaging mess
  • 如何制作顶部有锯齿边缘的 TileGroup 布局?

    我有包含按钮的spark components TileGroup 我希望按钮像选项卡一样出现在它们所服务的 ViewStack 顶部 目前 如果我在 TileList 中有 6 个项目 它会将其布局为 2 行 其中 4 个项目位于顶部拖曳
  • 在 Flex 中嵌入浏览器

    任何人都知道任何可以帮助我尝试将 Web 浏览器组件嵌入到 adobe flex 中的文档 我在 Adob e Air 中看到有一个 Item 但是 在 Adob e Flex 3 中 swf 文件可能位于某处 我没有看到它 有任何想法吗
  • 在多个 Flex 应用程序之间共享资源(图标/图像)的最佳方式是什么?

    我正在为我不久前创建的 Flex 应用程序创建一个新的 精简版 版本 我已经将许多类和组件移植到编译 SWC 文件的 Flex 库项目中 因为两者都是 Cairngorm 应用程序 所以我无法完全消除重复代码 但我应该能够共享资产 例如图标
  • 小样式自定义评级栏(只读自定义评级栏)

    我尝试创建一个自定义评级栏 我不使用style因为我只用过一次 所以 我创建了一个layer list in the drawable文件夹 其名称是custom rating bar xml
  • 有“进度按钮”吗?

    我想要一个具有双重功能的按钮作为进度条 例如 随着任务的进展 按钮会填充绿色背景 我知道我可以创建自己的 但如果有现成的东西 我很乐意使用它 有谁知道适合该要求的免费或商业组件吗 我希望它能在 Delphi 2007 中工作 但如果它仅在
  • Flex/AS3很奇怪的简单数字运算问题

    我的问题在 Flex 中描述起来非常简单 0 8 0 2 0 6000000000000001 以前有人得到过这个 我确定前两个成员是 0 8 和 0 2 并且是 Number 类 为什么会发生这种情况 另一件事 我从 像这样输入 var
  • 如何使用 flash.filesystem.FileStream [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Will 如何使用flash filesystem FileStream FileStream as文件在哪里 班上flash files
  • 原始数据转JPEG格式-JAVA

    我尝试使用 JPEGEncoder 将原始数据 ByteArray 转换为 JPEG 格式 但在移动设备上速度太慢 我已经在移动设备上测试过 我怎样才能在java中做同样的事情 我将把原始数据字节发送到java并用java将其编码为JPEG
  • 在 Flex SDK 上叠加 AIR SDK 后出现问题

    我尝试在 Windows 计算机上将 AIR SDK 覆盖到 Flex SDK 上 但之后遇到问题 我尝试覆盖两个 SDK 的多个官方版本 包括 Apache Flex SDK 并按照此处提到的步骤进行操作 http helpx adobe
  • 此 xpath 查询的 Flex/AS3/E4X 等效项是什么?

    鉴于此文档
  • Flex DataGrid:根据另一个值更改值?

    我在 Flex 中有一个 DataGrid 其中一列是复选框 另一列是数值 单击该复选框时 数值应更改 如果未选中该复选框 则数值应更改为 0 如果选中该复选框 则应更改为预定义的最小值 这是我的代码
  • AS3 无法从 Java 发送的套接字解​​码 AMF3 对象

    我有一个 java 套接字服务器 它在连接时将 Animal 对象发送到 Flash 客户端 对象的发送方式如下 Amf3Output amf3Output new Amf3Output SerializationContext getSe
  • 有什么方法可以分析 Flex 中内置的 SWF 的大小吗?

    我的 Flex 应用程序看起来比应有的要大 里面有很多代码 但资产不多 而且看起来很大 但我不知道如何弄清楚空间的去向 我知道 link report 选项 但它只给出外部链接库类的大小 我非常有兴趣查看应用程序中所有类和资源大小的报告 如
  • SQLite 参数 - 不允许表名作为参数

    我正在通过 Flex 在 AIR 中开发一个应用程序 但我没有发现 SQLite 出了什么问题 我习惯了 MySQL 参数有效 但仅在某些情况下有效 这是内置的针对sql注入的卫生系统的一部分吗 谢谢你的帮助 Works sqlite IN
  • Flex 字典字面量

    在 Flex 中工作 我需要用相当复杂的结构填充字典 基于本文档页面 http livedocs adobe com flex 3 html help html content 10 Lists of data 4 html我尝试通过以下语

随机推荐

  • 更改 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