模糊效果

来源:互联网 发布:万网域名如何备案 编辑:程序博客网 时间:2024/04/29 07:53
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initUI()">
    
<mx:Script>
        
<![CDATA[
            private var handlerEnd:Boolean=true;//标示变量,是否处于动画的结束事件
            private var isReverse:Boolean=false;//记录当前的播放状态
            private function initUI():void{
                //blur_effect.targets=[myPanel];//[]是数组的快捷定义方式,[myPanel]表示数组中只有一个元素,既是mypanel
                /*还可以这样写
                private var array:Array=new Array();
                array.push("myPanel");
                blur_effect.targets=array;
                */
                
                glow_effect.target=myPanel;
                blur_effect.target=myPanel;
            }
            //开始播放动画
            private function startBlur():void{
                handlerEnd=true;//handlerEnd为true,当播放结束时处理结束事件
                blur_effect.play();
                glow_effect.play();
            }
            //结束播放
            private function stopBlur():void{
                handlerEnd=false;//不再处理结束事件,必须在end之前修改 handlerEnd为false,否则end方法还将激活effectEnd事年,造成死循环
                blur_effect.end();
                btnPause.label="暂停";
                //第一种消除滤镜的方法
                //myPanel.filters=[];
                //[]代表一个空的数组,被指为filters的值,它起到将myPanel的滤镜全部清除,写这步的目的是为了实现点stop后,不再有模糊效果。
                //filters属性代表目标对象当前使用的滤镜的集合,它是所有可视化对象的公有属性,以数组的形式储存了自身所有的滤镜数据
                
                //如果对象使用了其它滤镜,希望保存下来,方法是:先获得对象的滤镜列表,然后对这个列表地行循环判断,如果是想删除的滤镜,则删除
                //第二种消除滤镜的做法:
                var tempArray:Array=myPanel.filters;//先建立一个中间变量存放当前的滤镜数据
                for(var i:uint=0;i<tempArray.length;i++){
                    if(tempArray[i] is BlurFilter){//判断是否是模糊滤镜
                        tempArray.splice(i,1);//splice(i,i) i表示要删除元素的开始点,1表示要删除的个数
                        i=i-1;//删除元素后必须将i减1,因为数组长度变小了,现在i位置变为原来的i+1位置的元素
                    }
                }
                myPanel.filters=tempArray;//将新的数据赋给对象,新的滤镜生效
            }
            private function pauseBlur():void{
                if(!blur_effect.isPlaying){ //判断是否处于正在播放状态,如果不是,则暂停失效
                    return;
                }
                if(btnPause.label=="暂停"){
                    btnPause.label="继续";
                    blur_effect.pause();
                }else{
                    btnPause.label="暂停";
                    blur_effect.resume();
                }
            }
            private function endBlur():void{
                if(handlerEnd){//用标示变量,判断是否当前已停止播放,如果没有停止,则反向播放
                    //切换播放方向,实现播放的无缝连接
                    isReverse=!isReverse;  
                    blur_effect.play(null,isReverse);
                    //play()方法的第一个参数表示止标对像,因为先前已指定了目标,所以这里可以省略,用null代替。
                    //第二个参数表示播放方向,如果为true,则逆向播放,为false正向播放
                }
            }
        
]]>
    
</mx:Script>
    
<!-- Blur对像一般有四个重要的属性,依次是blurXFrom, blurXTo,blurYFrom,blurYTo.这些属性指定了始末位置的模糊距离。   -->
    
<!-- effectEnd="endBlur()"监听了effectEnd事件,是为了实现动画的首尾无缝连接播放  -->
    
<mx:Blur id="blur_effect" effectEnd="endBlur()" blurXFrom="0" blurXTo="30" blurYFrom="0" blurYTo="30" duration="1500"></mx:Blur>
    
<mx:Glow id="glow_effect" alphaFrom="1.0" alphaTo="0.3" blurXFrom="0.0" blurXTo="30.0" blurYFrom="0.0" blurYTo="30.0" color="0x6633ff"></mx:Glow>
    
<!--  -->
    
<mx:Panel x="10" y="10" width="327" height="299" layout="absolute" id="myPanel" title="图片显示面板">
        
<mx:Image x="10" y="10" source="img/wang.jpg" width="111" height="163"/>
        
<mx:Label x="136" y="30" text="Label"/>
        
<mx:Button x="10" y="209" label="开始" id="btnPlay" click="startBlur()"/>
        
<mx:Button x="121" y="209" label="暂停" id="btnPause" click="pauseBlur()"/>
        
<mx:Button x="232" y="209" label="停止" id="btnStop" click="stopBlur()"/>
    
</mx:Panel>
    
</mx:Application>
 
原创粉丝点击