+展开
-ActionScript
package
{
import mx.skins.ProgrammaticSkin;
public class MyCustomSkin extends ProgrammaticSkin {
public function MyCustomSkin() {}
override protected function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number ):void
+展开
-ActionScript
package oreilly.cookbook {
import mx.skins.ProgrammaticSkin;
public class MyCustomSkin extends ProgrammaticSkin {
private var _measuredWidth:Number;
private var _measuredHeight:Number;
public function MyCustomSkin() {
_measuredWidth = 120;
_measuredHeight = 120;
}
// return defaulted constant for width
override public function get measuredWidth():Number { return _measuredWidth; }
// return defaulted constant for height
override public function get measuredHeight():Number { return _measuredHeight; }
override protected function updateDisplayList( unscaledWidth:Number, unscaledHeight:Number ):void {
// grab the value for the backgroundColor style property
var backgroundColor:Number = getStyle( "backgroundColor");
// implement drawing methods.
}
}
}
+展开
-ActionScript
package oreilly.cookbook {
import mx.graphics.RectangularDropShadow;
import mx.skins.Border;
public class CustomBorder extends Border {
private var _dropShadow:RectangularDropShadow;
private static const CNR_RAD:Number = 5;
private static const POINT_POS:String = 'bl' ;
private static const BG_COL:uint = 0x336699;
private static const BG_ALPHA:Number = 1.0;
public function CustomBorder() {
super();
_dropShadow = new RectangularDropShadow();
}
private function getCornerRadiusObj( rad:Number,pointPos:String ):Object{
var pt:String = pointPos ? pointPos : POINT_POS;
return {tl:rad, bl:0, tr:rad, br:rad};
}
override protected function updateDisplayList( unscaledWidth:Number,unscaledHeight:Number ):void {
super.updateDisplayList(unscaledWidth, unscaledHeight );
var cornerRadius:Number = getStyle( "cornerRadius") ?getStyle( "cornerRadius") :CustomBorder.CNR_RAD;
var backgroundColor:Number = getStyle( "backgroundColor") ?getStyle( "backgroundColor"):CustomBorder.BG_COL;
var backgroundAlpha:Number =getStyle( "backgroundAlpha") ?getStyle("backgroundAlpha"):CustomBorder.BG_ALPHA;
var cnrRadius:Object = getCornerRadiusObj( cornerRadius,getStyle( "pointPosition") );
graphics.clear();
drawRoundRect( 0, 0, unscaledWidth, unscaledHeight,cnrRadius , backgroundColor, backgroundAlpha );
_dropShadow.tlRadius = cnrRadius.tl;
_dropShadow.blRadius = cnrRadius.bl;
_dropShadow.trRadius = cnrRadius.tr;
_dropShadow.brRadius = cnrRadius.br;
_dropShadow.drawShadow( graphics, 0, 0,
unscaledWidth, unscaledHeight );
}
}
}
+展开
-ActionScript
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
initialize="initHandler();">
<mx:Script>
<![CDATA[
import oreilly.cookbook.CustomBorder;
private function initHandler():void {
myVBox.setStyle( "borderSkin", CustomBorder );
}
]]>
</mx:Script>
<mx:VBox width="100" height="50"
borderSkin="oreilly.cookbook.CustomBorder" />
<mx:VBox width="50" height="20"
borderSkin="{CustomBorder}" />
<mx:VBox id="myVBox" width="80" height="20" />
</mx:Application>
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Style>
VBox {
borderSkin:
ClassReference("oreilly.cookbook.CustomBorder");
cornerRadius: 30;
pointPosition: 'bl';
backgroundColor: #999933;
backgroundAlpha: 1;
paddingLeft: 5;
paddingRight: 5;
}
</mx:Style>
<mx:VBox id="myBox"
width="120" height="100"
verticalAlign="middle" horizontalAlign="center">
<mx:Text text="i'm a styled VBox!" textAlign="center" />
</mx:VBox>
</mx:Application>