首页 > 代码库 > 【教程】【FLEX】#006 控件位置的拖动

【教程】【FLEX】#006 控件位置的拖动

上一篇笔记学习了怎么从 把一个控件拖放到另外一个控件里面(即 A --》 B里面)。

而现在呢,则是学习  怎么把 A 拖到另外一个位置。 (A --》A位置改变);


先说一下实现的思路(主要也就是思路,不是什么技术问题):

1、在控件拖动前要先注册好控件的MouseDown事件。(可以在控件创建好的时候注册,获取其他你觉得合适的时候)

2、当鼠标MouseDown下的时候(鼠标点击下去,未放开鼠标的时候),注册控件的面板的MouseMoveROLL_UP事件以及控件的MouseUP

3、在MouseMove的处理方法里面设置控件的x,y ,算法看代码截图里面。

4、在MouseUp的处理事件里面,记得清除掉控件的ROLL_UPROLL_UPROLL_UP事件。

这样呢,当鼠标点击下,就可以拖动控件的位置。鼠标放开或者移出面板范围的时候,清除面板移动,面板移出和鼠标放开的事件。

代码例子:

1、之所以把MouseMove事件设置在面板上,因为如果拖动速度太快的话,鼠标位置会移出控件对象之外,导致拖动停止。

2、设置ROLL_OUT事件,如果鼠标移出了面板之外,控件就停止移动了。

技术分享


贴上一个封装好的类(可以实现控件的拖动和控件的大小改变,不过有一些小问题,还没来得及改。):

(详细的代码,封装好的一个类,只要传入控件对象,以及控件所在的面板对象就可以,帮你实现拖动了。)

核心封装类 和调用例子:

技术分享

1、类的功能

    1.1 实现控件的位置拖动

    1.2 实现控件大小的改变

调用方法

//创建这个控件操作的类var operator:ControlOperate = new ControlOperate(this,null);   //传入控件对象(所有需要移动的控件都是使用这个类,所以控件对象传入放在方法里了)operator.setVariate(control);

加上这两句的效果:

技术分享

拖动的效果:

技术分享

点击那个些小点,可以改变控件的大小。(上面,右边的点,改变控件大小的算法有问题,还没修改)

技术分享

多个控件的话

技术分享

多个控件调用的方法: Application1_creationComplete是Application创建结束调用的方法。

1、声明了一个ControlOperate对象

2、实例化(传入当前的面板对象,以及另外一个面板的对象显示控件的属性,目前未实现))

3、传入控件对象,传入之后,会为该对象注册相应的事件。

技术分享

 

 

【教程】【FLEX】#006 控件位置的拖动