Apache flex Flex 3:带有弹出按钮的圆形菜单
所以我有一个弹出按钮,当我点击按钮时,我希望弹出的菜单有圆角。我该怎么做呢 更新: 我发现了一个与我想做的类似的更新,可以在以下页面上找到: 唯一的区别是我用弹出按钮显示菜单。到目前为止,这是我的自定义菜单:Apache flex Flex 3:带有弹出按钮的圆形菜单,apache-flex,flex3,Apache Flex,Flex3,所以我有一个弹出按钮,当我点击按钮时,我希望弹出的菜单有圆角。我该怎么做呢 更新: 我发现了一个与我想做的类似的更新,可以在以下页面上找到: 唯一的区别是我用弹出按钮显示菜单。到目前为止,这是我的自定义菜单: package { import flash.display.Sprite; import mx.controls.Menu; import mx.events.MenuEvent; public class MyMenu extends Menu
package {
import flash.display.Sprite;
import mx.controls.Menu;
import mx.events.MenuEvent;
public class MyMenu extends Menu {
public function MyMenu() {
super();
addEventListener("menuShow", onMenuShow);
}
private function onMenuShow(e:MenuEvent):void {
callLater(maskRoundedCorners,[e]);
}
private function maskRoundedCorners(e:MenuEvent):void {
var menu:Menu = e.menu as Menu;
menu.cacheAsBitmap=false;
if (!menu.mask){
var maskx:uint = menu.x;
var masky:uint = menu.y;
var maskw:uint = menu.getExplicitOrMeasuredWidth();
var maskh:uint = menu.getExplicitOrMeasuredHeight();
var rad:int = menu.getStyle("cornerRadius") * 2;
var roundRect:Sprite = new Sprite();
roundRect.graphics.beginFill(0xFFFFFF);
roundRect.graphics.drawRoundRect(maskx,masky,maskw,maskh,rad);
roundRect.graphics.endFill();
menu.mask = roundRect;
}
}
}
}
有人能帮我解决我缺少的东西吗?我不确定是否需要覆盖任何菜单类函数
当我加载我的示例时:
添加的列表器(“menuShow”,onMenuShow)
获取激发,但当我单击弹出按钮显示菜单时,onMenuShow函数未激发,常规菜单显示时没有圆角
在此方面的任何帮助都将不胜感激
谢谢你终于明白了。以下是我提出的解决方案:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Menu;
[Bindable]
private var myMenu:Menu;
private function popUpButtonInit():void {
myMenu = new Menu();
myMenu.dataProvider = arr;
}
private function menuOpenHandler():void {
var maskx:uint = myMenu.x;
var masky:uint = myMenu.y - 1;
var maskw:uint = myMenu.getExplicitOrMeasuredWidth();
var maskh:uint = myMenu.getExplicitOrMeasuredHeight();
var rad:int = myMenu.getStyle("cornerRadius");
var roundRect:Sprite = new Sprite();
roundRect.graphics.beginFill( 0xFFFFFF );
roundRect.graphics.drawRoundRect( maskx, masky, maskw, maskh, rad );
roundRect.graphics.endFill();
myMenu.mask = roundRect;
}
]]>
</mx:Script>
<mx:Style>
Menu {
corner-radius: 30;
}
</mx:Style>
<mx:Array id="arr">
<mx:Object label="Alert" />
<mx:Object label="Button" />
<mx:Object label="ButtonBar" />
<mx:Object label="CheckBox" />
<mx:Object label="ColorPicker" />
<mx:Object label="ComboBox" />
</mx:Array>
<mx:PopUpButton width="78" height="25"
initialize="popUpButtonInit();"
popUp="{myMenu}" popUpGap="3" open="menuOpenHandler();"
horizontalCenter="0" verticalCenter="0">
</mx:PopUpButton>
</mx:Application>
菜单{
角半径:30;
}
如果您碰巧有更好的解决方案,请发表评论。最终解决了这个问题。以下是我提出的解决方案:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Menu;
[Bindable]
private var myMenu:Menu;
private function popUpButtonInit():void {
myMenu = new Menu();
myMenu.dataProvider = arr;
}
private function menuOpenHandler():void {
var maskx:uint = myMenu.x;
var masky:uint = myMenu.y - 1;
var maskw:uint = myMenu.getExplicitOrMeasuredWidth();
var maskh:uint = myMenu.getExplicitOrMeasuredHeight();
var rad:int = myMenu.getStyle("cornerRadius");
var roundRect:Sprite = new Sprite();
roundRect.graphics.beginFill( 0xFFFFFF );
roundRect.graphics.drawRoundRect( maskx, masky, maskw, maskh, rad );
roundRect.graphics.endFill();
myMenu.mask = roundRect;
}
]]>
</mx:Script>
<mx:Style>
Menu {
corner-radius: 30;
}
</mx:Style>
<mx:Array id="arr">
<mx:Object label="Alert" />
<mx:Object label="Button" />
<mx:Object label="ButtonBar" />
<mx:Object label="CheckBox" />
<mx:Object label="ColorPicker" />
<mx:Object label="ComboBox" />
</mx:Array>
<mx:PopUpButton width="78" height="25"
initialize="popUpButtonInit();"
popUp="{myMenu}" popUpGap="3" open="menuOpenHandler();"
horizontalCenter="0" verticalCenter="0">
</mx:PopUpButton>
</mx:Application>
菜单{
角半径:30;
}
如果您碰巧有更好的解决方案,请发表评论