我的项目渲染器是一个图像,所选项目的突出显示位于图像下方,因此您无法看到突出显示,是否有办法使图像突出显示“?”
感谢。
答案 0 :(得分:3)
这正是我意识到Flex中某些看似简单的东西真的很复杂的地方。 :)
根据您所处的效果,有多种方法可以处理类似这样的问题,但我总是这样做的方法首先是覆盖TileList的某些功能,然后使用自定义itemRenderers。 (我从来没有弄清楚如何在渲染内容的顶部上绘制List的绘图图形对象,但是其他人可能会对此有所了解。)< / p>
例如,我通常会创建一个扩展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库存控件的其他好处。
希望它有所帮助!
答案 1 :(得分:1)
使用边框的想法,通过2px填充图像? 想到的另一种选择是绝对定位......
答案 2 :(得分:0)
我认为关闭选择和突出显示效果更容易,然后在渲染器中创建您期望的内容。渲染器的数据需要在其中包含某种.selected属性。然后,渲染器可以绑定或响应对其data.selected(或类似的东西)的更改,并根据需要更新它的外观。
当我别无选择时,我只使用列表中的默认视觉效果。我永远不想尝试将List扩展到它(尽管,好的代码Christian)。