【问题标题】:Defining hitArea on Spark ToggleButton在 Spark ToggleButton 上定义 hitArea
【发布时间】:2014-12-18 18:19:01
【问题描述】:

我已经能够使用自定义图像 (loading Skin images dynamically) 为 ToggleButton 设置皮肤,并且运行良好。

我想添加的最后一个功能是将交互性(mouseEvents)限制为不透明像素。我一直在四处寻找,发现InteractivePNGCreating a hitarea for PNG Image with transparent (alpha) regions in FlexInteractivePNG在初始测试中的结果不稳定,所以我想我会尝试使用第二个链接中的代码定义 ToggleButton hitArea 属性。

我无法让它工作。我用于生成 Sprite 以定义命中区域的代码如下。 (我也尝试了一个简单的 Sprite,其中绘制了一个矩形。)当我设置 togglebutton.hitArea 时,我没有收到任何错误,但它不再是交互式的。

是否需要将定义 hitArea 的 Sprite 添加到它所应用到的对象的 DisplayList 中? 如果需要,我如何使用 ToggleButton 的子类来做到这一点? p>

        hitSprite = createHitArea(upImageData, 1);
        hitSprite.mouseEnabled = false;
        this.hitArea = hitSprite;

当然,在 ToggleButton 上调用 `addChild() 会引发错误。

        this.addChild(hitSprite);

我试过了:

  • 将我的自定义 ToggleButton 包装在 Spark 组中,然后包装一个 MX UIComponent,这样我就可以使用 SpriteDisplayElement 来添加东西——但这不起作用。

  • 在我的自定义 ToggleButton 定义中添加 Sprite - 这样做会出错。

我在这里使用 ToggleButton 类来实现这种功能是不是很不走运?我不明白为什么 ToggleButton 有一个 hitArea 属性,如果没有办法设置它 - 但事实并非如此,所以我一定做错了什么。

更新

我刚刚尝试了这种方法(Flex 4 Custom Component - How to notify skin of property changes?)绑定到在 ToggleButton 中创建的SpriteVisualElement - 但在设置 hitArea 时仍然没有成功 - 无论是 ToggleButton 还是它正在使用的皮肤。


    public function createHitArea(bitmapData:BitmapData, grainSize:uint=1):SpriteVisualElement
        {   
            var _hitarea:SpriteVisualElement = new SpriteVisualElement();
            _hitarea.graphics.beginFill(0x000000, 1.0);         
            for(var x:uint=0;x<bitmapData.width;x+=grainSize) {
                for(var y:uint=grainSize;y<bitmapData.height;y+=grainSize) {                    
                    if(x<=bitmapData.width && y<=bitmapData.height && bitmapData.getPixel(x,y)!=0) {
                        _hitarea.graphics.drawRect(x,y,grainSize,grainSize);                        
                    }                   
                }
            }           
            _hitarea.graphics.endFill();
            _hitarea.cacheAsBitmap = true;
            return _hitarea;
        }
    ]]>

【问题讨论】:

  • FWIW - 经过很长时间的研究,我放弃了,只是用直接的动作脚本写了整个事情。 Flex 中的“快速开发”就这么多。令人沮丧、过于复杂和不一致的文档、错误和死胡同。我喜欢 Flex 提供的一些糖,但它的成本太高了。

标签: actionscript-3 apache-flex flex4


【解决方案1】:

我对@9​​87654321@ 属性知之甚少,但我已经处理过具有透明度的按钮。我通过在我的按钮皮肤中添加类似这样的东西来解决这个问题:

    <s:Group id="clickTarget" top="0" left="0" bottom="0" right="0">
        <s:Rect top="0" left="0" bottom="0" right="0">
            <s:fill>
                <s:SolidColor color="0xFFFFFF" alpha="0.01" />
            </s:fill>
        </s:Rect>
    </s:Group>

【讨论】:

  • 谢谢 - 是的,我正在尝试使按钮图像上的透明区域对 mouseEvents 无响应。似乎hitArea 是这样做的方法,但到目前为止还没有乐趣。
猜你喜欢
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 2013-01-22
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
相关资源
最近更新 更多