После нескольких дней исследований я нахожу метод реализации вертикальной панели сплиттера, не полагаясь на мобильные компоненты: я использую тонкую (4 пикселя) кнопку между панелями, а затем при перетаскивании эту кнопку, я изменяю ширину левой панели в соответствии с горизонтальным положением мыши.
Некоторые примеры кода:
<s:HGroup>
<s:Panel id="panel1" width="50%" height="100%"/>
<s:Button width="4" height="100%"
mouseOver="mousePointerDrag()"
mouseOut ="mousePointerDrop()"
mouseDown="mouseDownHResize()"
mouseUp ="mouseUpHResize()"/>
<s:Panel id="panel2" width="50%" height="100%"/>
</s:HGroup>
MouseOver и MouseOut изменить указатель в руке, а на кнопку разделенного:
private function mousePointerDrag():void
{
Mouse.cursor = "hand";
}
private function mousePointerDrop():void
{
Mouse.cursor = "auto";
}
MouseDown и MouseUp позволяют слушателю изменить размер события, чтобы изменить размер ширина панели1 (панель2 соответственно изменится):
private function mouseDownHResize():void
{
this.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHResize);
}
private function mouseUpHResize():void
{
this.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHResize);
}
private function mouseMoveHResize(event:MouseEvent):void
{
panel1.width = event.stageX-4-4; // tricky part
}
Три cky part - выбрать правильную ширину панели1, чтобы указатель мыши оставался на кнопке изменения размера, когда мышь отпущена (в данном случае 4 пикселя для границы.
Конечно, для горизонтального сплиттера это нечто похожее.
Я новичок в программировании на ActionScript, так что это может быть плохим решением, но это было тем более простым, что я нашел до сих пор; если доступны другие чистые решения, они могут быть добавлены к этому вопросу.
Как насчет HDividedBox и VDividedBox? Http: //help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7e54.html –