4

我想摆脱基于列表的组件中典型的 Flex 翻转颜色,并显示我自己的翻转渲染风格。

将 useRollOver 设置为 'false'不是一个选项,因为禁用它也会使 List.isItemHighlighted() 函数始终返回 false。我的自定义渲染器依赖于该功能。

能这么难吗?有没有办法将翻转颜色设置为透明?我的渲染器是否有其他方法可以确定某个项目是否突出显示?

谢谢!

编辑:当然,我可以将翻转颜色设置为“白色”,并将alternatingRowColors 设置为类似于白色的颜色。有点作弊:)

4

3 回答 3

3

通过在自定义 ItemRenderer 中将“autoDrawBackground”属性设置为“false”,您可以禁用默认的悬停和选定背景颜色,然后在需要时在渲染器中设置它们。

这只是火花列表选项。MX 控件没有它。

于 2011-03-23T17:57:22.480 回答
2

@invertedSpear,感谢您的提示。

它确实有效!我的意思是,子类化,而不是编辑 SDK,还没有尝试过。但是您可以做的是为 List、DataGrid 等(甚至 AdvancedDataGrid)创建一个子类并添加以下函数:

override protected function drawHighlightIndicator(indicator:Sprite, x:Number, y:Number, width:Number,
    height:Number, color:uint, itemRenderer:IListItemRenderer):void
{
    // get style -- is this the right place?
    var alpha:Number = this.getStyle("rollOverAlpha");
    if (isNaN(alpha))
        alpha = 1.0;

    // no need to draw if alpha 0
    if (alpha <= 0)
        return;

    // draw -- this has been copied from superclass, and the alpha parameter added to beginFill()
    var g:Graphics = Sprite(indicator).graphics;
    g.clear();
    g.beginFill(color, alpha);
    g.drawRect(0, 0, width, height);
    g.endFill();

    indicator.x = x;
    indicator.y = y;
}

现在,如果您向该类添加样式声明,您就可以滚动了:

[Style(name="rollOverAlpha", type="Number", inherit="no")]
public class DataGridExt extends DataGrid
{
    ...
}

在 SDK 中更改它当然是更好的选择,因为您只需要接触两个类:ListBase 和 AdvancedListBase。我会检查 Adob​​e Jira 问题。

于 2010-02-26T11:58:55.487 回答
0

有一种方法可以做到这一点,但这并不好玩。您可以编辑 SDK 本身(开源是耶)。你可以进去,找到它设置高亮颜色的地方,然后开始添加代码来为高亮的 alpha 生成一个公共属性。我会先备份你的 SDK,因为有可能完全搞砸了。

看起来翻转代码在 ListBase 类中,所以我会制作该类的副本或扩展,并将翻转 alpha 的代码添加到其中。然后我会复制从这个新的 ListBase 继承的 List 类。

祝我的朋友好运,如果你成功了,请与全世界分享你的新课程,因为我相信其他人可能也想做同样的事情。

于 2010-02-25T15:31:39.853 回答