我正在使用一个SWT ScrolledComposite,但在Windows中滚动时,如果我滚动得太快,就会出现一些撕裂/闪烁。我可以怎么做来双缓冲或减少这种效果,或者我可以怎样覆盖默认的滚动功能,使其滚动更加平滑?滚动区域中有文本框,因此我认为画布不起作用。
我正在使用一个SWT ScrolledComposite,但在Windows中滚动时,如果我滚动得太快,就会出现一些撕裂/闪烁。我可以怎么做来双缓冲或减少这种效果,或者我可以怎样覆盖默认的滚动功能,使其滚动更加平滑?滚动区域中有文本框,因此我认为画布不起作用。
关键是要使用延迟和一像素滚动来实现。
以下是我实际实现的代码部分:
public void scrollOnePixelUp() {
scrolledComposite.getContent().setLocation(0, scrolledComposite.getContent().getLocation().y - 1);
}
public void scrollOnePixelDown() {
scrolledComposite.getContent().setLocation(0, scrolledComposite.getContent().getLocation().y + 1);
}
private int pixelScrollDelay = 50;//ms
scrollingThread = new Thread() {
public void run() {
doScrolling = true;
int i = 0;
while((i < scrollLength) && running && doScrolling) {
i++;
if (d.isDisposed())
return;
d.asyncExec(new Runnable() {
public void run() {
if (scrollUp)
scrollOnePixelUp();
else
scrollOnePixelDown();
}
});
try {
sleep(pixelScrollDelay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
doScrolling = false;
}
};