Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3250806
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类:

2009-09-05 16:15:02

1.自定义布局要点
    (1)继承BaseLayout类
    (2)重载updateDisplayList()
    (3)利用FOR循环,获取所有的待显示元素,计算X和Y坐标值,用
setLayoutBoundsPosition()进行显示。
    for (var i:int = 0; i < count; i++)
    {
       layoutElement = target.getElementAt(i);
       //计算X和Y坐标的值
       layoutElement.setLayoutBoundsPosition( w2 + (_x * radius) - 25, h2 + (_y * radius) - 10 );
    }

例1:实现一个在原点周围顺时针放置组件的布局


    xmlns:fx=""
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/halo"
    xmlns:layouts="layouts.*">
   
   
   
                    for ( var x:int = 0; x < 10; x++ ){
                dataSource.addItem( dataSource.length );
            }
        ]]>
   

   
   
       
   

   
            width="100%" height="100%"
        dataProvider="{ dataSource }"
        itemRenderer="SimpleItemRenderer">
       
       
           
       

       
   
   
            left="5" bottom="5"
        label="Click to Add a Button"
        click="dataSource.addItem( dataSource.length )" />
   



    xmlns:fx=""
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/halo">
   
   
       
       
   

   
   
       
   

   
   
   



package layouts
{
    import mx.core.ILayoutElement;
    import spark.layouts.supportClasses.LayoutBase;
   
    public class CircularLayout extends LayoutBase
    {
        override public function updateDisplayList(w:Number, h:Number):void
        {
            super.updateDisplayList(w, h);
           
            if (!target)
                return;
           
            var layoutElement:ILayoutElement;
            var count:uint = target.numElements;
           
            var angle : Number = 360/count;
            var radius : Number = Math.min( target.width/2, target.height/2 ) - 25;
           
            var w2 : Number = target.width/2;
            var h2 : Number = target.height/2;
           
            for (var i:int = 0; i < count; i++)
            {
                layoutElement = target.getElementAt(i);
               
                if (!layoutElement || !layoutElement.includeInLayout)
                    continue;
               
                var radAngle : Number = (angle * i) * (Math.PI / 180) ;
               
                var _x : Number = Math.sin( radAngle );
                var _y : Number = - Math.cos( radAngle );
               
                layoutElement.setLayoutBoundsPosition( w2 + (_x * radius) - 25, h2 + (_y * radius) - 10 );
            }
        }
    }
}

例2:平行添加长方形框


               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/halo"
               xmlns:layouts="layouts.*"
               viewSourceURL="srcview/index.html"
               creationComplete="creationCompleteHandler(event)">

   
                    import mx.events.FlexEvent;
            import mx.graphics.SolidColorStroke;
            import spark.primitives.Rect;

            protected function buttonClickHandler(event:MouseEvent):void
            {
                addRectangle();
            }
            protected function creationCompleteHandler(event:FlexEvent):void
            {
                for(var i:int;i<7;i++)
                {
                    addRectangle();
                }
            }
            protected function addRectangle():void
            {
                var r:Rect = new Rect();
                r.width = 100;
                r.height = 20;
                r.stroke = new SolidColorStroke(0x9Bc5dc);
                container.addElement(r);
            }
        ]]>
   


                  top="0"
              horizontalCenter="0"
              click="buttonClickHandler(event)" />
                 left="0" right="0" top="40" bottom="0">
       
          
       

   




package layouts
{
    import mx.core.ILayoutElement;
    import spark.components.supportClasses.GroupBase;
    import spark.layouts.supportClasses.LayoutBase;

    public class StepLayout extends LayoutBase
    {
       
        private var _columns:int = 5;
        [Inspectable(category="General")]

        public function get columns():int
        {
            return _columns;
        }

        public function set columns(value:int):void
        {
            if (_columns == value)
                return;

            _columns = value;
            invalidateTargetSizeAndDisplayList();
        }
       

        override public function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            var layoutTarget:GroupBase = target;
           
            var layoutElement:ILayoutElement;
             var num:Number = target.numElements
    
             var row:Number = 0;   
             var col:int = 0;
    
            for (var index:int = 0; index < num; index++)
            {
                layoutElement = layoutTarget.getElementAt(index);
                layoutElement.setLayoutBoundsSize(NaN,NaN);   
               
                var elementWidth:Number = layoutElement.getLayoutBoundsWidth();
                var elementHeight:Number = layoutElement.getLayoutBoundsHeight();
               
                var elementX:Number = col * elementWidth;
                var elementY:Number = col * elementHeight + row * elementHeight;
   
                layoutElement.setLayoutBoundsPosition(elementX,elementY);
               
                col++;
               
                if(col == _columns)
                {    col = 0;
                    row++;
                }
            }
        }
       
        private function invalidateTargetSizeAndDisplayList():void
        {
            var g:GroupBase = target;

            if (!g)
                return;
            g.invalidateSize();
            g.invalidateDisplayList();
        }
    }
}
阅读(3773) | 评论(0) | 转发(0) |
0

上一篇:FLEX4布局

下一篇:乐乎社区

给主人留下些什么吧!~~