Degrafa渲染DataGrid

     在DataGrid中可以利用多种组件实现Column的渲染,这里就介绍一个Degrafa中的surface渲染Column的Demo:

    

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:degrafa="com.degrafa.*"
    xmlns:paint="com.degrafa.paint.*"
    xmlns:geometry="com.degrafa.geometry.*" 
    layout="absolute" 
    creationComplete="generateData()"
    backgroundColor="#FFFFFF"
    backgroundGradientColors="[#999999, #FFFFFF]" viewSourceURL="srcview/index.html">
    
    <mx:Style>
        ApplicationControlBar {
           highlightAlphas: 0.7, 0.06;
           fillAlphas: 1, 1;
           fillColors: #999999, #666666;
           cornerRadius: 0;
           dropShadowEnabled: true;
           shadowDirection: center;
        }
    </mx:Style>
    
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            [Bindable]
            private var dataCollection : ArrayCollection;
            
            private function generateData() : void
            {
                if ( dataCollection == null )
                    dataCollection = new ArrayCollection();
                
                dataCollection.disableAutoUpdate();
                dataCollection.removeAll();
                
                for ( var x : int = 0; x < 100; x ++ )
                {
                    var o : Object = new Object();
                    o.capacity = 500;
                    o.used = Math.random() * o.capacity;
                    o.free = o.capacity - o.used;
                    o.name = "Disk: " + x;
                    dataCollection.addItem( o );
                }
                
                dataCollection.enableAutoUpdate();
                dataCollection.refresh();
            }
        ]]>
    </mx:Script>
    
    <mx:ApplicationControlBar dock="true">
        
        <mx:Button label="Generate New Data" click="generateData()" useHandCursor="true" buttonMode="true" />
        
    </mx:ApplicationControlBar>
    
    <mx:DataGrid top="10" bottom="10" left="10" right="10" 
        dataProvider="{ dataCollection }">
        <mx:columns>
            <mx:DataGridColumn headerText="Name" dataField="name"/>
            <mx:DataGridColumn headerText="Capacity" dataField="capacity"/>
            <mx:DataGridColumn headerText="Used" dataField="used"/>
            <mx:DataGridColumn headerText="Used" dataField="used">
                <mx:itemRenderer>
                    <mx:Component>
                        <mx:Canvas>
                                
                            <degrafa:Surface>
                            
                                   <degrafa:fills>
                                    <paint:LinearGradientFill id="redGradient" angle="90">
                                        <paint:GradientStop alpha="1"  color="#FF0000"/>
                                        <paint:GradientStop alpha="1" color="#333333"/>
                                    </paint:LinearGradientFill>
                                </degrafa:fills>
                                
                                <degrafa:GeometryGroup>
                                    <geometry:RoundedRectangle 
                                        fill="{redGradient}"
                                        cornerRadius="2"
                                        width="{ width * ( data.used / data.capacity ) }"
                                        height="{ height }" />
                                </degrafa:GeometryGroup> 
                                
                                <degrafa:filters>
                                    <mx:DropShadowFilter />
                                </degrafa:filters>
                                
                            </degrafa:Surface>
                            
                        </mx:Canvas>
                    </mx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="Free" dataField="free"/>
            <mx:DataGridColumn headerText="Free" dataField="free">
                <mx:itemRenderer>
                    <mx:Component>
                        <mx:Canvas>
                                
                            <degrafa:Surface>
                            
                                   <degrafa:fills>
                                    <paint:LinearGradientFill id="greenGradient" angle="90">
                                        <paint:GradientStop alpha="1"  color="#00FF00"/>
                                        <paint:GradientStop alpha="1" color="#333333"/>
                                    </paint:LinearGradientFill>
                                </degrafa:fills>
                                
                                <degrafa:GeometryGroup>
                                    <geometry:RoundedRectangle 
                                        fill="{greenGradient}"
                                        cornerRadius="2"
                                        width="{ width * ( data.free / data.capacity ) }"
                                        height="{ height }" />
                                </degrafa:GeometryGroup> 
                                
                                <degrafa:filters>
                                    <mx:DropShadowFilter />
                                </degrafa:filters>
                                
                            </degrafa:Surface>
                            
                        </mx:Canvas>
                    </mx:Component>
                </mx:itemRenderer>
            </mx:DataGridColumn>
        </mx:columns>
    </mx:DataGrid>
    
    
    
</mx:Application>

 

   原文见:http://www.insideria.com/2008/03/degrafa-datagrids-visual-displ.html

 

你可能感兴趣的:(html,xml,Adobe)