如何平滑滚动SWT复合控件?

3

我正在使用一个SWT ScrolledComposite,但在Windows中滚动时,如果我滚动得太快,就会出现一些撕裂/闪烁。我可以怎么做来双缓冲或减少这种效果,或者我可以怎样覆盖默认的滚动功能,使其滚动更加平滑?滚动区域中有文本框,因此我认为画布不起作用。

1个回答

0

关键是要使用延迟和一像素滚动来实现。

以下是我实际实现的代码部分:

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;
    }
};

希望这能有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接