定制Flex菜单图标
默认Menu上的Icon必须通过iconField和iconFunction去指定,但是这两种方式都必须用嵌入资源Class名字去指定Icon,如果想用动态的图片(比如URL)作为Menu的Icon,就必须定制一把MenuItemRenderer。
首先写个类CustomMenuItemRenderer继承MenuItemRenderer,里面增加一个如下变量作为自定义Icon的组件:
view sourceprint?1 private var image:UIComponent = new UIComponent();
然后里面重写measure方法(计算MenuItem的宽高):
view sourceprint?01 override protected function measure():void {
02 super.measure();
03
04 if (separatorIcon || listData == null) {
05 return;
06 }
07
08 var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
09 if(imageAsset == null){
10 return;
11 }
12 measuredWidth += imageAsset.width;
13 if(imageAsset.height > measuredHeight){
14 measuredHeight = imageAsset.height;
15 }
16 }
重写commitProperties方法(重画并增加Icon,指定Icon宽高):
view sourceprint?01 override protected function commitProperties():void {
02 super.commitProperties();
03
04 if (separatorIcon || listData == null) {
05 return;
06 }
07
08 var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
09 if(imageAsset == null){
10 return;
11 }
12 image.width = imageAsset.width;
13 image.height = imageAsset.height;
14 image.graphics.beginBitmapFill(imageAsset.getBitmapData());
15 image.graphics.drawRect(0, 0, image.width, image.height);
16 image.graphics.endFill();
17 if(!this.contains(image)){
18 this.addChild(image);
19 }
20 }
重写updateDisplayList方法(指定Icon的位置,由于Icon在左边,所以super一把后,再移动Labe等的位置):
view sourceprint?01 override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
02 super.updateDisplayList(unscaledWidth, unscaledHeight);
03
04 if (separatorIcon || listData == null) {
05 return;
06 }
07
08 var imageAsset:IImageAsset = Utils.getImageAsset(data.@iconName);
09 if(imageAsset == null){
10 return;
11 }
12 if(typeIcon){
13 typeIcon.x += imageAsset.width;
14 }
15 if(label){
16 label.x += imageAsset.width;
17 }
相关新闻>>
- 发表评论
-
- 最新评论 更多>>