快速业务通道

忽略PNG透明区域的事件

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-07

有时候我们希望加载PNG后其透明区域不响应事件..

网上的一般的方法为~
先获取其bitmapData对象..

当进行点击操作时使用..
bitmapData.getPixel32(x,y)获取..
点击位置的是否透明..
然后再操作...

而mosueOver与mouseOut等事件稍为复杂点..
需要侦听mouseMove..
然后对经过的坐标进行透明判断~~再抛出相应的事件...

今天介绍的方法原理跟上面差不多..
不过我们使用Sprite的另一个属性hitArea..( 关于hitArea的说明请查看这里 )
在图像加载完毕后..
先绘制一个去除了透明部份的Sprite..
然后把该Sprite指定为源对象的hitArea..

先看看效果:

代码也很简单:main.mXML 01.<?xml version="1.0" encoding="utf-8"?> 02.<mx:Application xmlns:mx=" http://www.adobe.com/2006/mxml " layout="absolute" xmlns:local="*"> 03.<mx:Script> 04.<![CDATA[ 05.import mx.managers.CursorManager; 06.private function abc(e:MouseEvent):void 07.{ 08.if(e.type == "mouseOver") 09.{ 10.CursorManager.setBusyCursor(); 11.}else 12.{ 13.CursorManager.removeBusyCursor(); 14.} 15.} 16.]]> 17.</mx:Script> 18.<local:MyImage source=" /upimg/userup/0908/1210055AR8.jpg " mouseOver="abc(event)" mouseOut="abc(event)" y="25"/> 19.<mx:Image source=" /upimg/userup/0908/1210055AR8.jpg " mouseOver="abc(event)" mouseOut="abc(event)" x="344" y="25"/> 20.</mx:Application>
MyImage.as,自定义Image类.. 01.package 02.{ 03.import Flash.display.BitmapData; 04.import flash.display.DisplayObject; 05.import flash.display.Sprite; 06.import flash.events.Event; 07.import flash.geom.Matrix; 08.import flash.utils.setTimeout; 09. 10.import mx.controls.Image; 11./** 12.* 自定义Image类,使之忽略PNG透明区域 13.* @author L4cd.Net 14.*/ 15.public class MyImage extends Image 16.{ 17.private var ht:Sprite = new Sprite(); 18.public function MyImage() 19.{ 20.addChild(ht); 21.hitArea = ht; 22.//指定hitArea为ht对象 23.ht.visible = false; 24.ht.mouseEnabled = false; 25.mouseChildren = false; 26.addEventListener(Event.COMPLETE,complete,false,99,true); 27.setTimeout(update,50) 28.} 29.private function complete(e:Event):void 30.{ 31.setTimeout(update,50) 32.} 33.private function update():void 34.{ 35.if(!content)return; 36.var loader:DisplayObject = content.parent as DisplayObject; 37.var bit:BitmapData = new BitmapData(loader.width,loader.height,true,0x00000000); 38.var mat:Matrix = new Matrix(); 39.mat.scale(loader.scaleX,loader.scaleY); 40.bit.draw(loader,mat); 41.//重绘图象到bit 42.ht.graphics.clear(); 43.ht.graphics.beginFill(0); 44.for(var x:uint=0;x<bit.width;x++) 45.{ 46.for(var y:uint=0;y<bit.height;y++) 47.{ 48.if(bit.getPixel32(x,y))ht.graphics.drawRect(x,y,1,1); 49.} 50.} 51.//以graphics画出bit的无透明区域 52.ht.graphics.endFill(); 53.} 54.} 55.} 关键词:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号