自适应窗口组件

发现自带的没有这个组件自己就写了一个简单的,后来才发现第三方有写这个,看来是白写了,下边开源下源码

有兴趣的可以自己看看 一共就5个文件 ResizeWindow.as是住文件,继承的是TitleWindow

 ResizeWindow.mxml是flex的组件界面直接用就可以了。如果想扩展的可以自己扩展下

支持拖拉,大小拖动

--------------------------------ResizeWindow.mxml----------------------------

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas 
 xmlns:wxsr="com.components.resizeWindow.*"
  xmlns:mx="http://www.adobe.com/2006/mxml" width="200" height="200">
 <wxsr:ResizeWindow width="100%" x="0" y="0" height="100%" showCloseButton="true">
 
 </wxsr:ResizeWindow>
</mx:Canvas>

-------------------------------------ResizeWindow.as---------------------------------------

 package com.components.resizeWindow
{
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.events.TimerEvent;
 import flash.geom.Point;
 import flash.geom.Rectangle;
 import flash.utils.Timer;
 
 import mx.containers.TitleWindow;
 import mx.effects.Move;
 import mx.effects.Resize;
 import mx.events.MoveEvent;
 import mx.events.TweenEvent;

 public class ResizeWindow extends TitleWindow
 {
 	public static const RESIZE:String='resize'
 	private var bounds:Rectangle
 	public var scaleGrid:ScaleGrid
 	private var timer:Timer
 	private var _isResize:Boolean=false
 	private var _resizeType:String
 	private var moveing:Boolean=false
 	public var minMax:Boolean=false
  
 	public function ResizeWindow()
 	{
 	 super();
 	 this.showCloseButton=true
 	 this.timer=new Timer (30)
 	 this.timer.addEventListener(TimerEvent.TIMER,timerFunc)
 	 this.isPopUp=true
 	 this.scaleGrid=new ScaleGrid
 	 
 	 //this.scaleGrid.visible=false
 	 this.scaleGrid.addEventListener(ResizeWindowEvent.RESIZE,resizeFunc)
 	 
 	 this.addEventListener(Event.ADDED_TO_STAGE,addedFunc,false,0,true)
 	 
 	  
 	}
 	public function ableResize(bool:Boolean):void
 	{
 	 this.scaleGrid.visible=bool
 	}
 	public function get isResize():Boolean
 	{
 	 return this._isResize
 	}
 	public function get resizeType():String
 	{
 	 return this._resizeType
 	}
  
 	private function timerFunc(event:TimerEvent):void
 	{
 	 if(this._isResize)
 	 {
 	 this.moveing=false
 	 this.removeEventListener(MoveEvent.MOVE,moveFunc)
 	 var point:Point=new Point(this.parent.parent.mouseX,this.parent.parent.mouseY)
 	  
 	 switch (this.resizeType)
 	 {
 	  
 	 case ResizeWindowEvent.TOP_LEFT:
 	 if(point.x>this.x+this.width-this.scaleGrid.minWidth)point.x=this.x+this.width-this.scaleGrid.minWidth
 	 if(point.y>this.y+this.height-this.scaleGrid.minHeight)point.y=this.y+this.height-this.scaleGrid.minHeight
 	 this.scaleGrid.resizeTopLeft(point)
 	  
 	 break;
 	 case ResizeWindowEvent.TOP:
 	 if(point.y>this.y+this.height-this.scaleGrid.minHeight)point.y=this.y+this.height-this.scaleGrid.minHeight
 	 this.scaleGrid.resizeTop(point)
 	 break;
 	 case ResizeWindowEvent.TOP_RIGHT:
 	 if(point.y>this.y+this.height-this.scaleGrid.minHeight)point.y=this.y+this.height-this.scaleGrid.minHeight
 	 this.scaleGrid.resizeTopRight(point)
 	 break;
 	 case ResizeWindowEvent.LEFT:
 	 if(point.x>this.x+this.width-this.scaleGrid.minWidth)point.x=this.x+this.width-this.scaleGrid.minWidth
 	 this.scaleGrid.resizeLeft(point)
 	 break;
 	 case ResizeWindowEvent.RIGHT:
 	 if(point.x<this.x+this.scaleGrid.minWidth)point.x=this.x+this.scaleGrid.minWidth;
 	 if(point.y<this.y+this.scaleGrid.minHeight)point.y=this.y+this.scaleGrid.minHeight;
 	 this.scaleGrid.resizeRight(point)
 	 break;
 	 case ResizeWindowEvent.BOUTTON_LEFT:
 	  
 	 if(point.x>this.x+this.width-this.scaleGrid.minWidth)point.x=this.x+this.width-this.scaleGrid.minWidth
 	  
 	 this.scaleGrid.resizeBouttonLeft(point)
 	 break;
 	 case ResizeWindowEvent.BOUTTON:
 	  
 	 this.scaleGrid.resizeBoutton(point)
 	 break;
 	 case ResizeWindowEvent.BOUTTON_RIGHT:
 	 if(point.x<this.x+this.scaleGrid.minWidth)point.x=this.x+this.scaleGrid.minWidth;
 	 if(point.y<this.y+this.scaleGrid.minHeight)point.y=this.y+this.scaleGrid.minHeight;
 	 this.scaleGrid.resizeBouttonRight(point)
 	 break;
 	  
 	 }
 	 }
 	}
 	private function mouseUpFunc(event:MouseEvent):void
 	{
 	 
 	 if(!this.moveing&&this.isResize){
 	  
 	 this._isResize=false
 	 var resize:Resize=new Resize(this)
 	 resize.duration=100
 	 resize.heightTo=this.scaleGrid.rect.height
 	 resize.widthTo=this.scaleGrid.rect.width
 	 resize.play()
 	 var move:Move=new Move(this)
 	 move.duration=80
 	 move.xTo=this.scaleGrid.rect.topLeft.x//-this.scaleGrid.top.height*1.5//-this.scaleGrid.top.width
 	 move.yTo=this.scaleGrid.rect.topLeft.y//-this.scaleGrid.top.height*1.5//-this.scaleGrid.top.width
 	 move.play()
 	 resize.addEventListener(TweenEvent.TWEEN_END,endFunc)
 	 this.timer.stop()
 	 }
 	 moveing=false
 	 
 	}
 	private function endFunc(event:TweenEvent):void
 	{
 	 moveing=true
 	 event.target.removeEventListener(TweenEvent.TWEEN_END,endFunc)
 	 this.scaleGrid.graphics.clear()
 	 
 	 this.dispatchEvent(new Event (RESIZE))
 	 this.addEventListener(MoveEvent.MOVE,moveFunc)
 	 var time:Timer=new Timer(50)
 	 time.addEventListener(TimerEvent.TIMER,updataAfterMove)
 	 time.start()
 	 
 	}
 	private function updataAfterMove(event:TimerEvent):void
 	{
 	 var t:Timer=event.currentTarget as Timer
 	 if(t.currentCount>2){
 	 t.stop()
 	 t.removeEventListener(TimerEvent.TIMER,updataAfterMove)
 	 }
 	 this.resize()
 	 this.scaleGrid.graphics.clear()
 	}
  
 	private function resizeFunc(event:ResizeWindowEvent):void
 	{
 	 this.moveing=false
 	 this._resizeType=event.resizeType
 	 this._isResize=true
 	 this.timer.start()
 	 
 	}
  
  
  
 	private function addedFunc(event:Event):void
 	{
 	 
 	 this.stage.addChild(scaleGrid)
 	 this.stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpFunc)
 	 this.addEventListener(MoveEvent.MOVE,moveFunc)
 	 
 	 this.addEventListener(Event.ENTER_FRAME,enterFrameFunc)
 	}
 	private function moveFunc(event:MoveEvent):void
 	{
  
 	 
 	 this.resize()
 	 this.scaleGrid.graphics.clear()
 	 
 	}
 	private function fitSize(rect:Rectangle):void
 	{
 	 this.x=rect.x
 	 this.y=rect.y
 	 this.width=rect.width
 	 this.height=rect.height
 	 
 	}
 	private var num:int=1
 	private function enterFrameFunc(event:Event):void
 	{
 	 
 	 this.bounds!=null?this.resize():''
 	 if(this.num>=2){
 	  
 	 event.target.removeEventListener(Event.ENTER_FRAME,enterFrameFunc)
 	 }
 	 this.bounds=this.getBounds(this.parent)
 	 this.num++
 	 this.scaleGrid.graphics.clear()
 	 //this.scaleGrid.visible=true
 	 
 	}
 	public function resize():void
 	{
 	 var rect:Rectangle=this.getBounds(this.parent.parent)
 	 rect.width=this.width
 	 rect.height=this.height
 	 rect.y=y//+this.scaleGrid.top.height*1.5
 	 rect.x=x//+this.scaleGrid.top.height*1.5
 	 this.scaleGrid.resize(rect)
 	 this.dispatchEvent(new Event (RESIZE))
 	}
  
  
  
 }
}

 

----------------------------------ScaleGrid------------------------------------------- 

package com.components.resizeWindow
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.geom.Rectangle;

public class ScaleGrid extends Sprite
{


public var rect:Rectangle
private var box:Sprite
public var top:ResizeCell
public var boutton:ResizeCell
public var left:ResizeCell;
public var right:ResizeCell
public var top_left:ResizeCell
public var top_right:ResizeCell
public var boutton_left:ResizeCell
public var boutton_right:ResizeCell
public var minWidth:Number=100
public var minHeight:Number=100



public function ScaleGrid()
{
confIt()
}


public function resize(rect:Rectangle):void
{
//if(rect.bottomRight.x<=rect.topLeft.x&&rect.bottomRight.y<=rect.topLeft.y>100){
resizeing(rect)
//}

//this.boutton_right.x=this.
}

private function resizeing(rect:Rectangle):void
{
this.rect=rect
this.top_left.x=this.rect.topLeft.x
this.top_left.y=this.rect.topLeft.y;
this.top_left.rect=new Rectangle(this.top_left.x,this.top_left.y,this.top_left.width,this.top_left.height)


this.top.x=this.rect.topLeft.x+this.rect.width/2-this.top.width/2
this.top.y=this.rect.topLeft.y;
this.top.rect=new Rectangle(this.top.x,this.top.y,this.top.width,this.top.height)

this.top_right.x=this.rect.topLeft.x+this.rect.width-this.top_right.width
this.top_right.y=this.rect.topLeft.y;
this.top_right.rect=new Rectangle(this.top_right.x,this.top_right.y,this.top_right.width,this.top_right.height)

this.left.x=this.rect.topLeft.x
this.left.y=this.rect.topLeft.y+this.rect.height/2-this.left.height/2;
this.left.rect=new Rectangle(this.left.x,this.left.y,this.left.width,this.left.height)

this.right.x=this.rect.topLeft.x+this.rect.width-this.right.width
this.right.y=this.rect.topLeft.y+this.rect.height/2-this.right.height/2;
this.right.rect=new Rectangle(this.right.x,this.right.y,this.right.width,this.right.height)

this.boutton_left.x=this.rect.topLeft.x
this.boutton_left.y=this.rect.topLeft.y+this.rect.height-this.boutton_left.height
this.boutton_left.rect=new Rectangle(this.boutton_left.x,this.boutton_left.y,this.boutton_left.width,this.boutton_left.height)

this.boutton.x=this.rect.topLeft.x+this.rect.width/2-this.boutton.width/2
this.boutton.y=this.rect.topLeft.y+this.rect.height-this.boutton.height
this.boutton.rect=new Rectangle(this.boutton.x,this.boutton.y,this.boutton.width,this.boutton.height)

this.boutton_right.x=this.rect.topLeft.x+this.rect.width-this.boutton_right.width
this.boutton_right.y=this.rect.topLeft.y+this.rect.height-this.boutton_right.height
this.boutton_right.rect=new Rectangle(this.boutton_right.x,this.boutton_right.y,this.boutton_right.width,this.boutton_right.height)


this.graphics.clear()
this.graphics.lineStyle(1)
this.graphics.moveTo(this.rect.topLeft.x,this.rect.topLeft.y)
this.graphics.lineTo(this.rect.bottomRight.x,this.rect.topLeft.y)
this.graphics.lineTo(this.rect.bottomRight.x,this.rect.bottomRight.y)
this.graphics.lineTo(this.rect.topLeft.x,this.rect.bottomRight.y)
this.graphics.lineTo(this.rect.topLeft.x,this.rect.topLeft.y)

}

public function resizeTop(top:Point):void
{
top.y-=this.top.height*.5
var tmp:Rectangle=new Rectangle(this.rect.x,top.y,this.rect.width,this.rect.height+this.rect.topLeft.y-top.y)
doResize(tmp)
}
public function resizeTopLeft(topLeft:Point):void
{
topLeft.y-=this.top.height*.5
var x:Number=topLeft.x
var y:Number=topLeft.y
var width:Number=this.rect.width+this.rect.left-topLeft.x
var height:Number=this.rect.height+this.rect.topLeft.y-topLeft.y

var tmp:Rectangle=new Rectangle(x,y,width,height)
doResize(tmp)
}
public function resizeTopRight(topRight:Point):void
{
var tmp:Rectangle=new Rectangle(this.rect.x,topRight.y,Math.abs(this.rect.topLeft.x-topRight.x),this.rect.bottomRight.y-topRight.y)
doResize(tmp)
}
public function resizeLeft(left:Point):void
{
var tmp:Rectangle=new Rectangle(left.x,rect.y,this.rect.width+this.rect.left-left.x,this.rect.height)
doResize(tmp)
}
public function resizeRight(right:Point):void
{
var tmp:Rectangle=new Rectangle(this.rect.x,rect.y,Math.abs(this.rect.topLeft.x-right.x),this.rect.height)
doResize(tmp)
}
public function resizeBoutton(boutton:Point):void
{
boutton.y+=this.top.height*.5
var tmp:Rectangle=new Rectangle(this.rect.x,rect.y,this.rect.width,rect.height+boutton.y-rect.bottomRight.y)
doResize(tmp)
}
public function resizeBouttonLeft(bouttonLeft:Point):void
{
bouttonLeft.y+=this.top.height*.5
var tmp:Rectangle=new Rectangle(bouttonLeft.x,rect.y,this.rect.width+this.rect.left-bouttonLeft.x,rect.height+bouttonLeft.y-rect.bottomRight.y)
doResize(tmp)
}
public function resizeBouttonRight(bouttonRight:Point):void
{
bouttonRight.y+=this.top.height*.5
var tmp:Rectangle=new Rectangle(this.rect.x,rect.y,this.rect.width+bouttonRight.x-rect.bottomRight.x,rect.height+bouttonRight.y-rect.bottomRight.y)
doResize(tmp)

}


private function doResize(tmp:Rectangle):void
{
tmp.width<this.minWidth?tmp.width=minWidth:''
tmp.height<this.minHeight?tmp.height=this.minHeight:''

this.rect=tmp
this.resize(this.rect)

}


private function confIt():void
{
this.box=new Sprite

this.top_left=new ResizeCell
this.top=new ResizeCell
this.top_right=new ResizeCell

this.left=new ResizeCell
this.right=new ResizeCell

this.boutton_left=new ResizeCell
this.boutton=new ResizeCell
this.boutton_right=new ResizeCell

this.box.addChild(this.top_left)
this.box.addChild(this.top)
this.box.addChild(this.top_right)
this.box.addChild(this.left)
this.box.addChild(this.right)
this.box.addChild(this.boutton_left)
this.box.addChild(this.boutton)
this.box.addChild(this.boutton_right)
this.addChild(this.box)
this.rect=new Rectangle

this.top_left.addEventListener(MouseEvent.MOUSE_DOWN,top_left_Click)
this.top.addEventListener(MouseEvent.MOUSE_DOWN,top_Click)
this.top_right.addEventListener(MouseEvent.MOUSE_DOWN,top_right_Click)
this.left.addEventListener(MouseEvent.MOUSE_DOWN,left_Click)
this.right.addEventListener(MouseEvent.MOUSE_DOWN,right_Click)
this.boutton_left.addEventListener(MouseEvent.MOUSE_DOWN,boutton_left_Click)
this.boutton.addEventListener(MouseEvent.MOUSE_DOWN,boutton_Click)
this.boutton_right.addEventListener(MouseEvent.MOUSE_DOWN,boutton_right_Click)


}
private function createEvent(target:ResizeCell,type:String):void
{
var e:ResizeWindowEvent=new ResizeWindowEvent(ResizeWindowEvent.RESIZE)
e.rect=target.rect
e.resizeType=type
this.dispatchEvent(e)
}
private function top_left_Click(event:MouseEvent):void
{

createEvent(this.top_left,ResizeWindowEvent.TOP_LEFT)
}
private function top_Click(event:MouseEvent):void
{
createEvent(this.top,ResizeWindowEvent.TOP)
}
private function top_right_Click(event:MouseEvent):void
{
createEvent(this.top_right,ResizeWindowEvent.TOP_RIGHT)
}
private function left_Click(event:MouseEvent):void
{
createEvent(this.left,ResizeWindowEvent.LEFT)
}
private function right_Click(event:MouseEvent):void
{
createEvent(this.right,ResizeWindowEvent.RIGHT)
}
private function boutton_left_Click(event:MouseEvent):void
{
createEvent(this.boutton_left,ResizeWindowEvent.BOUTTON_LEFT)
}
private function boutton_Click(event:MouseEvent):void
{
createEvent(this.boutton,ResizeWindowEvent.BOUTTON)
}
private function boutton_right_Click(event:MouseEvent):void
{
createEvent(this.boutton_right,ResizeWindowEvent.BOUTTON_RIGHT)
}

}
}


----------------------------------------ResizeCell.as--------------------------------

package com.components.resizeWindow
{
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.net.URLRequest;

public class ResizeCell extends Sprite
{
public var rect:Rectangle

public function ResizeCell(w:Number=15,h:Number=15)
{
this.drawGrid(w,h)
}
public function set icon(source:Object):void
{
if(source as Class)
{
this.addChild(new source)
}else if(source as String)
{
var loader:Loader=new Loader
loader.load(new URLRequest(String(source)))
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadeeFunc,false,0,true)
}

}
private function loadeeFunc(event:Event):void
{
var load:DisplayObject= event.target.loader as DisplayObject
load.width=this.rect.width
load.height=this.rect.height
var bmd:BitmapData=new BitmapData(this.rect.width,this.rect.height,true,0)
bmd.draw(load)
this.graphics.clear()
this.graphics.beginBitmapFill(bmd)
this.graphics.drawRect(0,0,this.rect.width,this.rect.height)
this.graphics.endFill()
this.rect=new Rectangle(0,0,this.rect.width,this.rect.height)
}
public function drawGrid(width:Number=15,height:Number=15):void
{
this.graphics.clear()
this.graphics.beginFill(0,.1)
this.graphics.drawRect(0,0,width,height)
this.graphics.endFill()
this.rect=new Rectangle(0,0,width,height)
}
}
}





----------------------------------------ResizeWindowEvent.as---------------------------



package com.components.resizeWindow
{
import flash.events.Event;
import flash.geom.Rectangle;

public class ResizeWindowEvent extends Event
{
public static const TOP:String='top'
public static const TOP_LEFT:String='top_left'
public static const TOP_RIGHT:String='top_right'
public static const LEFT:String='left'
public static const RIGHT:String='right'

public static const BOUTTON:String='boutton'
public static const BOUTTON_LEFT:String='boutton_left'
public static const BOUTTON_RIGHT:String='boutton_right'
public static const RESIZE:String='resize'
public var rect:Rectangle
public var resizeType:String
public function ResizeWindowEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}

}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值