我的自定义小部件在悬停时会更改背景。它工作得很好,但我想在没有背景和悬停背景之间平滑过渡。它适用于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
,但它不会显示平滑过渡。为什么呢?
答案 0 :(得分:3)
这不起作用,因为只要你在你的代码中,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();
}
}