0

我有我的自定义小部件,它在悬停时会改变背景。它工作得很好,但我希望在无背景和悬停背景之间平滑过渡。它将与 一起使用GC.setAlpha(),但是:

Display.getDefault().asyncExec(new Runnable() {
    public void run() {
        for (int i=0;i<255;i++) {
            setBG(BGHelper(imgHover,i)); //i - alpha
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }   
});

此代码等到i == 255,但它不显示平滑过渡。为什么?

4

1 回答 1

3

这是行不通的,因为只要你在你的 Code SWT 中就不会重绘或改变组件。

您应该在单独的线程中完成工作并要求Display.asyncExec每次更改。

for (int i = 0; i < 255; i++) {
    final int x = i;
    Display.getDefault().asyncExec(new Runnable() {
        public void run() {
            setBG(BGHelper(imgHover,x)); //x - alpha
        }
    });
    try {
        Thread.sleep(1);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
于 2012-11-04T18:04:40.310 回答