SWT窗口特效之缓慢展开和消失

    这个特效不知道取什么名字好,就叫缓慢展开或消失吧,整个效果就像是一张纸一样慢慢拉出来或缩进去。这个效果的实现也比较简单,主要是通过设置shell的size来实现的,通常我们会有四种效果,即从左到右慢慢展现和消失、从右到左慢慢展现和消失、从上到下慢慢展现和消失、从下到上慢慢展现和消失。下面分别说明如下:

 

1.从左到右慢慢展现

 

    这个效果实现的思路就是shell的location不变,刚开始设置shell的size的宽度为0,高度不变,然后逐步的将shell的width增加,从而就实现了shell的缓慢打开。代码如下:

 

final int width = shell.getSize().x;
final int startX = shell.getLocation().x;
new Thread(new Runnable() {
    private int startWidth = 0;
    public void run() {
        while (startWidth <= width) {
            shell.getDisplay().syncExec(new Runnable() {
                public void run() {
	    shell.setSize(++ startWidth, shell.getSize().y);
                }
            });
            Thread.yield(); // 暂停
        }
    }
}).start();

 

    注意,我们是将每一次修改的操作都当成一个Runnable来执行的,而不是把整个while循环放在一个Runnable中执行,这样是为了避免Display执行Runnable时无法处理其他响应事件,从而导致展开效果并不流畅!另外,即使使用asyncExec执行也是一样的效果!

 

 

2.从右到左慢慢展现

 

    从右到左的慢慢展现效果实现的思路和从左到右其实是一样的,只不过增加了一个同时设置shell的location的操作,这样我们才可以模拟从右边到左边慢慢打开的效果。实现代码如下:

final int width = shell.getSize().x;
final int startX = shell.getLocation().x;
new Thread(new Runnable() {
    private int startWidth = 0;
    public void run() {
        while (startWidth <= width) {
            shell.getDisplay().syncExec(new Runnable() {
                public void run() {
	    shell.setSize(++ startWidth, shell.getSize().y);
                    shell.setLocation(startX + width - startWidth, shell.getLocation().y);
                }
            });
            Thread.yield();
        }
    }
}).start();

 

 

3.从左到右慢慢消失

 

    慢慢消失的实现思路是逐步的改变shell的size,从左到右慢慢消失就是shell的高度不变,width从原始的宽度慢慢减小到0,同时还需要同步设置shell的location,以保证右边总是在同一个位置。代码如下:

final int shellWidth = shell.getSize().x;
final int shellStartX = shell.getLocation().x;
new Thread() {
    private int width = shellWidth;
    private int startX = shellStartX;
    public void run() {
        while (width > 0) {
            shell.getDisplay().syncExec(new Runnable() {
                public void run() {
                    shell.setSize(-- width, shell.getSize().y);
                    shell.setLocation(++ startX, shell.getLocation().y);
                }
            });
            Thread.yield();
        }
    }
}.start();

  

     在消失完毕后,你还可以选择将shell关闭或是重新恢复到以前的大小和位置,那么就需要记录shell开始的size和location了。

 

 

4.从右到左慢慢消失

 

    从右到左慢慢消失相比从左到右慢慢消失只是少了一个重新设置shell的location的操作,其代码如下: 

final int shellWidth = shell.getSize().x;
final int shellStartX = shell.getLocation().x;
new Thread() {
    private int width = shellWidth;
    private int startX = shellStartX;
    public void run() {
        while (width > 0) {
            shell.getDisplay().syncExec(new Runnable() {
                public void run() {
                    shell.setSize(-- width, shell.getSize().y);
                }
            });
            Thread.yield();
        }
    }
}.start();

  

 

5.从上到下慢慢显示

 

    实现思路就是shell的location不变,shell的width不变,将shell的height从0慢慢增加到shell的实际高度即可。代码也比较简单,就不重复写了,留给大家自己写吧,呵呵。

 

 

6.从上到下慢慢消失

 

    实现思路就是shell的width不变,逐步的将shell的height从原始高度变到0,同时height每减少1,则将其location的y增加1,从而保证shell的底部总是在同一位置,而顶部则是在逐步的下移,从而实现效果,代码略。

 

 

7.从下到上慢慢显示

 

    实现思路就是shell的width不变,将高度逐步的由0变成原始的高度,同时也需要同步改变shell的location,高度每增加1,则shell的location的y则减1.代码略。

 

 

8.从下到上慢慢消失

 

    实现思路就是shell的width不变,将height由原始的高度慢慢减小到0,其location不变,代码略。

 

 

    以上就是对shell的size和location的改变来实现慢慢消失或显示的效果,这也是一个很简单的窗口特效了。后面将继续给大家介绍SWT窗口的其他特效,如百叶窗的打开和关闭特效、圆形消失和显示特效等等:-)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值