这是情况。在我的应用程序中,我有一个由透明 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 上捕获右键单击事件的指示,那就太好了。