In flex, there are various situation where masking of a content is needed, but yet at the same time, rather than creating a separate Component to work as a mask, they is a property 'clipContent' that allows you to display part of a content too.
The following would be the source code of the demo.
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" creationComplete="creationCompleteHandler(event)"> <mx:Script> <![CDATA[ import mx.events.FlexEvent; [Embed(source="../assets/image.jpeg")] [Bindable] public var imgCls:Class; //Here's the mouse Down handler for the red border box //at the same time allows it to be draggable around //the canvas protected function mouseDownHandler(event:MouseEvent):void { stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEvent); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); dragger.startDrag(false, new Rectangle(0,0, dragCanvas.width - dragger.width, dragCanvas.height - dragger.height)); } //Here's the mouse Up handler for the red border box //stops all the crazy dragging. protected function mouseUpHandler(event:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEvent); stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); dragger.stopDrag(); } //Function to update the position of the main Image //base on the position of the draggable red border //box. private function mouseMoveEvent(event:Event):void { var maxX:int = dragCanvas.width - dragger.width; var maxY:int = dragCanvas.height - dragger.height; var minX:int = dragger.width; var minY:int = dragger.height; var currX:int = (dragger.x + dragger.width - minX); var currY:int = (dragger.y + dragger.height - minY); currX = Math.ceil((currX / maxX) * 100); currY = Math.ceil((currY / maxY) * 100); maxX = mainImg.width - mainCanvas.width; maxY = mainImg.height - mainCanvas.height; minX = mainCanvas.width; minY = mainCanvas.height; mainImg.x = currX * (maxX/100) * -1; mainImg.y = currY * (maxY/100) * -1; } protected function creationCompleteHandler(event:FlexEvent):void { mouseMoveEvent(null); } ]]> </mx:Script> <mx:HBox width="100%" height="100%" verticalAlign="middle" horizontalAlign="center"> <mx:Spacer width="100%"/> <mx:VBox height="100%" width="100%" verticalAlign="middle" horizontalAlign="center"> <mx:HBox width="100%" horizontalAlign="center"> <mx:Label text="Drag the red box around..."/> </mx:HBox> <mx:Canvas width="150" height="100" id="dragCanvas" verticalScrollPolicy="off" horizontalScrollPolicy="off"> <mx:Image source="{imgCls}" width="150" height="100" scaleContent="true" maintainAspectRatio="true"/> <mx:Canvas backgroundAlpha="0" id="dragger" width="20" height="20" x="0" y="0" borderThickness="1" borderColor="#FF0000" borderStyle="solid" backgroundColor="#000000" mouseDown="mouseDownHandler(event)" mouseUp="mouseUpHandler(event)"/> </mx:Canvas> <mx:HBox width="100%" horizontalAlign="center"> <mx:Label text="Clip Main Content?"/> <!-- Checkbox used to toggle the clipContent property of the main Canvas--> <mx:CheckBox id="chkClipContent" selected="true"/> </mx:HBox> </mx:VBox> <mx:VBox width="100%" height="100%" verticalAlign="middle" horizontalAlign="center"> <mx:HBox width="100%" horizontalAlign="center"> <mx:Label text="Selection is shown here."/> </mx:HBox> <mx:Canvas id="mainCanvas" verticalScrollPolicy="off" horizontalScrollPolicy="off" width="80" height="80" clipContent="{chkClipContent.selected}"> <mx:Image source="{imgCls}" x="0" y="0" id="mainImg" scaleContent="false"/> <mx:Canvas width="80" height="80" borderThickness="1" borderColor="#FF0000" borderStyle="solid"/> </mx:Canvas> </mx:VBox> <mx:Spacer width="100%"/> </mx:HBox> </mx:Application>* Click here to view the demo of this example.
^ Click here for the source files of this demo.
By the way the following URLs are pretty good in generating dummy contents.
No comments:
Post a Comment