2

这是情况。在我的应用程序中,我有一个由透明 PNG 组成的覆盖层。我已使用以下代码将 png 的 hitarea 替换为 1x1 图像:

[Bindable]
[Embed(source = "/assets/1x1image.png")]
private var onexonebitmapClass:Class;

private function loadCompleteHandler(event:Event):void
{
    // Create the bitmap
    var onexonebitmap:BitmapData = new onexonebitmapClass().bitmapData;
    var bitmap:Bitmap;
    bitmap = event.target.content as Bitmap;
    bitmap.smoothing = true;
    var _hitarea:Sprite = createHitArea(onexonebitmap, 1);
    var rect:flash.geom.Rectangle = _box.toFlexRectangle(sprite.width, sprite.height);
    var drawnBox:Sprite = new FlexSprite();

    bitmap.width = rect.width;
    bitmap.height = rect.height;
    bitmap.x = -loader.width / 2;
    bitmap.y = -loader.height / 2;
    bitmap.alpha = _alpha;
    _hitarea.alpha = 0;
    drawnBox.x = rect.x + rect.width / 2;
    drawnBox.y = rect.y + rect.height / 2;

    // Add the bitmap as a child to the drawnBox
    drawnBox.addChild(bitmap);

    // Rotate the object.
    drawnBox.rotation = _rotation;

    // Add the drawnBox to the sprite
    sprite.addChild(drawnBox);

    // Set the hitarea to drawnBox
    drawnBox.hitArea = _hitarea;

}


private function createHitArea(bitmapData:BitmapData, grainSize:uint = 1):Sprite
{
    var _hitarea:Sprite = new Sprite();
    _hitarea.graphics.beginFill(0x900000, 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();
    return _hitarea;
}

这是基于此处完成的工作:为 PNG 图像创建一个具有透明 (alpha) 区域的命中区域在 Flex

使用上面的代码,我基本上可以忽略所有鼠标事件(单击、双击、移动等)的覆盖层。但是,我无法捕获覆盖层下方的项目的右键单击(上下文菜单)事件.

例如,我有一个拼写检查组件,可以检查任何文本项上的拼写,并且像大多数其他拼写检查器一样,如果字典中的单词不正确或不在字典中,则会用红色下划线,如果你右键单击它会给你一个建议列表在上下文菜单中。当文本框不在覆盖层下时,这很好用,但如果文本框在覆盖层下,我什么也得不到。

如果有人可以给我一些关于如何在透明 png 下的 textItem 上捕获右键单击事件的指示,那就太好了。

4

0 回答 0