我的项目渲染器是图像,所选项目的突出显示在图像下方,因此您看不到突出显示,有没有办法使突出显示“超过”图像?
谢谢。
这正是我意识到 Flex 中某些看似简单的事情实际上有多么复杂的时候。:)
根据您所追求的效果,有多种处理此类问题的方法,但我一直这样做的方法是首先覆盖 TileList 的某些功能,然后使用自定义 itemRenderers。(不过,我一直无法弄清楚如何将 List 的图形对象绘制在渲染的内容之上——其他人可能会对此有所了解。)
例如,我通常会创建一个扩展 TileList 的新类,然后重写负责绘制高亮和选择指示符的方法,以更好地控制这些函数绘制指示符的方式(或者有时我会注释掉它们的内容完全一致,这样就不会绘制任何内容):
public class MyCustomTileList extends TileList
{
public function MyCustomTileList()
{
super();
}
override protected function drawHighlightIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void
{
var g:Graphics = Sprite(indicator).graphics;
g.clear();
g.beginFill(getStyle("myRolloverColor"), getStyle("myRolloverAlpha"));
g.drawRect(1, 1, width - 1, height - 1);
g.endFill();
indicator.x = x;
indicator.y = y;
}
override protected function drawSelectionIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void
{
//
}
}
但正如你所说,由于图形对象似乎总是在列表项的内容后面绘制,我通常会选择使用项目渲染器在与我的数据相关联的图像之上绘制一些东西(例如,半透明框)物品:
<?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>
我确信还有其他方法,但是这种方法对我来说效果很好,而且我通常会发现将库存 Flex 控件子类化还有其他好处。
希望能帮助到你!
考虑使用边框,将图像填充 2px 吗?想到的另一种选择是绝对定位......
我认为关闭选择和高亮效果更容易,然后在渲染器中创建您期望的内容。渲染器的数据需要有某种 .selected 属性。然后,渲染器可以绑定或响应更改它的 data.selected (或类似的东西)并根据需要更新它的外观。
当我别无选择时,我只使用列表中的默认视觉效果。我永远不想尝试将 List 扩展到它(虽然,好的代码 Christian)。