Flex

Flex教學-ObjectHandles拖拉改變遮罩的大小與角度

梅干 2009/02/20

  最近跟好友山羊一起在研究ObjectHandles元件,這個東東可以直接拖拉,改變物件的大小與角度,先前曾分享過,在Flex中動態產生遮罩,雖然已很簡便但唯一較不聰明的地方,就在於當要改變遮罩大小時,則需要透過輸入數值的方式,再按下確定鈕,才可改變遮罩範圍,這似乎有點不符人性,因此今天跟山羊討論了許久,總算把oh跟遮色片整合起來了,現在只要直接拖拉,就可直接改變遮罩的大小與角度,讓操作起來更加的直覺,同時還是可透過數值來修改遮罩的大小與角度。


AdvMask.mxml

<?xml version=“1.0” encoding=“utf-8”?>

mx:Script
<![CDATA[
import mx.events.ResizeEvent; //引用oh類別檔
import com.roguedevelopment.objecthandles.ObjectHandleEvent; import com.roguedevelopment.objecthandles.ObjectHandlesMouseCursors; import com.roguedevelopment.objecthandles.SelectionManager;

        private var roundedMask:Sprite;
        private var cornerRadius:int;
        private var w:int=100;
        private var h:int=100;

        [Embed(source="img/resize_handle.png")]
        [Bindable]
        protected var resize_handle:Class;
        [Embed(source="img/rotate_handle.png")]
        [Bindable]
        protected var rotate_handle:Class;

        private function CreatMask():void
        { 
            cornerRadius=int(this.maskcornerRadiusValue.text);          
            roundedMask = new Sprite();                
            roundedMask.x=0;
            roundedMask.y=0;

            roundedMask.graphics.clear(); 
            roundedMask.graphics.beginFill(0xf2113b); 
            roundedMask.graphics.drawRoundRect(0, 0, 
                        w, h, 
                        cornerRadius, cornerRadius); 
            roundedMask.graphics.endFill();
            roundedMask.alpha=0.4;

            maskOh.setStyle("borderStyle","solid");                          
            maskOh.setStyle("borderColor","#0000cc");       
            maskOh.rawChildren.addChild(roundedMask);//將roundedMask遮罩加到maskOh裡

            this.crtMaskbtn.enabled=false;
            this.addMaskbtn.enabled=true;
            this.disMaskbtn.enabled=false;
            this.delMaskbtn.enabled=true;

            //將遮罩的值寫入輸入框中
            this.maskWidthValue.text=String(w);             
            this.maskHeightValue.text=String(h);
            this.maskRotationValue.text="0";

            this.maskOh.width=w;
            this.maskOh.height=h;
            this.maskOh.rotation=0;
            this.maskOh.x=0;
            this.maskOh.y=0;

            this.maskOh.mouseEnabled = true;                            
        }           

        private function addMask():void
        {               
            this.addMaskbtn.enabled=false;
            this.disMaskbtn.enabled=true;
            this.delMaskbtn.enabled=true;
            this.setBtn.enabled=false;

            image.mask = roundedMask;//套用遮罩

            maskOh.deselect();//取消oh控制點
            maskOh.mouseEnabled = false;//取消oh滑鼠選取

            maskOh.setStyle("borderStyle","");                          
            maskOh.setStyle("borderColor",""); 
        }
        private function disMask():void
        {
            this.crtMaskbtn.enabled=false;
            this.addMaskbtn.enabled=true;
            this.disMaskbtn.enabled=false;
            this.delMaskbtn.enabled=true;
            this.setBtn.enabled=true;

            image.mask=null;//解除遮罩                  
            this.maskOh.mouseEnabled = true;//啟用oh滑鼠選取

            maskOh.setStyle("borderStyle","solid");                          
            maskOh.setStyle("borderColor","#0000cc");                           
        }

         private function delMask():void
         {                          
            this.crtMaskbtn.enabled=true;
            this.addMaskbtn.enabled=false;
            this.disMaskbtn.enabled=false;
            this.delMaskbtn.enabled=false;

            this.maskWidthValue.text="";                
            this.maskHeightValue.text="";
            this.maskRotationValue.text="";

            maskOh.rawChildren.removeChild(roundedMask);//移除遮罩
            maskOh.deselect();//取消oh控制點
            maskOh.mouseEnabled = false;//取消oh滑鼠選取
            image.mask=null;//解除遮罩 

            maskOh.setStyle("borderStyle","");                          
            maskOh.setStyle("borderColor","");          
        }

        private function setMaskValue():void
        {               
            var w:int=int(this.maskWidthValue.text);
            var h:int=int(this.maskHeightValue.text);
            var r:int=int(this.maskRotationValue.text);

            maskOh.width=w;
            maskOh.height=h;
            maskOh.rotation=r;          
        }

        private function maskMouseHanlder():void
        {
            roundedMask.width=this.maskOh.width;
            roundedMask.height=this.maskOh.height;

            maskWidthValue.text=String(this.maskOh.width);
            maskHeightValue.text=String(this.maskOh.height);
            maskRotationValue.text=String(this.maskOh.rotation);
        }
        private function maskMouseDown():void
        {
            this.maskOh.select();//開啟oh控制點
        }
    ]]><br />
</mx:Script></p>

























[範例預覽] [範例下載]