flex 圆形布局
?
package layouts { import mx.core.ILayoutElement; import spark.layouts.supportClasses.LayoutBase; public class CircularLayout extends LayoutBase { public function CircularLayout() { super(); } override public function updateDisplayList(w:Number,h:Number):void { super.updateDisplayList(w,h); if (!target) return; var layoutElement:ILayoutElement; var count:uint = target.numElements; trace(count); var radius : Number = Math.min( target.width/2,target.height/2 ) - 25; var _x:Number=0; var _y:Number=0; var angleRadians:Number=2*Math.PI/count; var ar:Number=0; var centerX:Number=target.width/2; var centerY:Number=target.height/2; for (var i:int = 0; i < count; i++) { layoutElement = target.getElementAt(i); var width:Number=layoutElement.getLayoutBoundsWidth(); var height:Number=layoutElement.getLayoutBoundsHeight(); _x=Math.sin( ar )*radius+centerX-width/2; _y=centerY-Math.cos(ar)*radius-height/2; trace("x:"+_x+" y:"+_y); trace("width:"+layoutElement.getLayoutBoundsWidth()+" height:"+layoutElement.getLayoutBoundsHeight()); // layoutElement.setLayoutBoundsSize(70,20); layoutElement.setLayoutBoundsPosition(_x,_y); ar=ar+angleRadians; } } } } ? mxml代码: ? <s:BorderContainer x="202" y="144" width="200" height="200"> ? <!-- --> ? <s:layout> ? <layouts:CircularLayout /> ? </s:layout> ? <s:Button label="Button" width="70" height="20"/> ? <s:Button label="Button" width="70" height="20"/> ? <s:Button label="Button" width="70" height="20"/> ? <s:Button label="Button" width="70" height="20"/> ? <s:Button label="Button" width="70" height="20"/> ? <s:Button label="Button" width="70" height="20"/> ? </s:BorderContainer> 效果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |