Apache flex Flex:有没有办法让TileList高亮显示;超过;项目渲染器?

Apache flex Flex:有没有办法让TileList高亮显示;超过;项目渲染器?,apache-flex,itemrenderer,Apache Flex,Itemrenderer,“我的项目”渲染器是一个图像,选定项目的高光位于图像下方,因此您无法看到高光,是否有办法使高光“覆盖”图像 谢谢。是否想过使用边框,将图像填充2倍? 我想到的另一个选择是绝对定位…是否想过使用边框,将图像填充2倍? 我想到的另一个选择是绝对定位…这正是我意识到Flex中某些看似简单的东西实际上有多复杂的时候。:) 根据您所追求的效果,有各种各样的方法来处理像这样的问题,但我一直采用的方法是首先覆盖TileList的某些函数,然后使用自定义ItemRenders。(不过,我一直无法弄清楚如何将列表

“我的项目”渲染器是一个图像,选定项目的高光位于图像下方,因此您无法看到高光,是否有办法使高光“覆盖”图像


谢谢。

是否想过使用边框,将图像填充2倍?
我想到的另一个选择是绝对定位…

是否想过使用边框,将图像填充2倍?
我想到的另一个选择是绝对定位…

这正是我意识到Flex中某些看似简单的东西实际上有多复杂的时候。:)

根据您所追求的效果,有各种各样的方法来处理像这样的问题,但我一直采用的方法是首先覆盖TileList的某些函数,然后使用自定义ItemRenders。(不过,我一直无法弄清楚如何将列表的图形对象draw放在渲染内容的顶部,其他人可能会对此有所了解。)

例如,我通常会创建一个扩展TileList的新类,然后重写负责绘制高亮显示和选择指示器的方法,以便更好地控制这些函数绘制指示器的方式(或者有时我只注释掉它们的全部内容,这样就不会绘制任何内容):

但正如您所说,由于图形对象似乎总是在列表项的内容后面绘制,因此我通常会选择使用项渲染器在与我的数据项关联的图像顶部绘制一些东西(例如,半透明框):

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[

            private function img_rollOver():void
            {
                highlight.visible = true;
            }

            private function img_rollOut():void
            {
                highlight.visible = false;
            }

        ]]>
    </mx:Script>

    <mx:Image id="img" source="{something}" horizontalCenter="0" verticalCenter="0" buttonMode="true" useHandCursor="true" mouseChildren="true" rollOver="img_rollOver()" rollOut="img_rollOut()" />
    <mx:Box id="highlight" alpha="0.1" color="#FFFFFF" horizontalCenter="0" verticalCenter="0" width="{img.width}" height="{img.height}" buttonMode="true" useHandCursor="true" mouseChildren="true" rollOver="img_rollOver()" rollOut="img_rollOut()" visible="false" />

</mx:Canvas>

我确信还有其他方法,但这一种对我来说非常有效,我通常也会发现将stock Flex控件子类化的其他好处


希望有帮助

正是在这一点上,我意识到Flex中某些看似简单的东西实际上是多么复杂。:)

根据您所追求的效果,有各种各样的方法来处理像这样的问题,但我一直采用的方法是首先覆盖TileList的某些函数,然后使用自定义ItemRenders。(不过,我一直无法弄清楚如何将列表的图形对象draw放在渲染内容的顶部,其他人可能会对此有所了解。)

例如,我通常会创建一个扩展TileList的新类,然后重写负责绘制高亮显示和选择指示器的方法,以便更好地控制这些函数绘制指示器的方式(或者有时我只注释掉它们的全部内容,这样就不会绘制任何内容):

但正如您所说,由于图形对象似乎总是在列表项的内容后面绘制,因此我通常会选择使用项渲染器在与我的数据项关联的图像顶部绘制一些东西(例如,半透明框):

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[

            private function img_rollOver():void
            {
                highlight.visible = true;
            }

            private function img_rollOut():void
            {
                highlight.visible = false;
            }

        ]]>
    </mx:Script>

    <mx:Image id="img" source="{something}" horizontalCenter="0" verticalCenter="0" buttonMode="true" useHandCursor="true" mouseChildren="true" rollOver="img_rollOver()" rollOut="img_rollOut()" />
    <mx:Box id="highlight" alpha="0.1" color="#FFFFFF" horizontalCenter="0" verticalCenter="0" width="{img.width}" height="{img.height}" buttonMode="true" useHandCursor="true" mouseChildren="true" rollOver="img_rollOver()" rollOut="img_rollOut()" visible="false" />

</mx:Canvas>

我确信还有其他方法,但这一种对我来说非常有效,我通常也会发现将stock Flex控件子类化的其他好处


希望有帮助

我认为关闭“选择”并高亮显示效果,然后在渲染器中创建您期望的效果更容易。渲染器的数据需要包含某种.selected属性。然后,渲染器可以绑定或响应对其data.selected(或类似内容)所做的更改,并根据需要更新其外观


我只有在没有其他选择时才使用列表中的默认视觉效果。我不想尝试将列表扩展到它(尽管代码很好)。

我认为关闭选择并高亮显示效果,然后在渲染器中创建您期望的效果更容易。渲染器的数据需要包含某种.selected属性。然后,渲染器可以绑定或响应对其data.selected(或类似内容)所做的更改,并根据需要更新其外观


我只有在没有其他选择时才使用列表中的默认视觉效果。我从来都不想尝试将列表扩展到它(尽管代码很好)。

谢谢,但我有一个问题,为什么构造函数的函数与类名不匹配?因为我是个呆子。:)我只是复制了一点代码而已。固定的。(感谢您的注意!)图形对象始终位于显示对象的子对象后面。这是无法改变的。就个人而言,我会用ActionScript而不是MXML构建第二种方法,因为可以使用基本形状或精灵对象作为高亮显示。为什么要使用包含各种不需要的容器布局逻辑的方框?过度使用不需要的容器是Flex应用程序中最大的性能消耗之一。项目渲染器也不应该基于画布,除非您特别需要滚动条在我的例子中,我使用方框和画布的原因都与我自己的应用程序有关(顺便说一句,与滚动条无关);我的目的是演示问题的答案和可行的解决方案——列表的图形对象不能用于在项目渲染器上绘制,而这样做的方法是使用自定义项目渲染器。我通常选择MXML是为了简单,但正如您所建议的,这样做肯定会有一些折衷。尽管如此,这一点还是很清楚。谢谢,不过我有一个问题,为什么你的构造函数与你的类名不匹配?因为我是个傻瓜。:)我只是复制了一点代码而已。固定的。(感谢您的注意!)图形对象始终位于显示对象的子对象后面。这是无法改变的。就个人而言,我会用ActionScript而不是MXML构建第二种方法,因为可以使用基本形状或精灵对象作为高亮显示。为什么要使用包含各种不需要的容器布局逻辑的方框?过度使用