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窗口的其他特效,如百葉窗的打開和關閉特效、圓形消失和顯示特效等等:-)

發佈了2 篇原創文章 · 獲贊 0 · 訪問量 3410
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章