Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT,在Windows上的动画背景上使用透明的拖动图像_Java_Windows_Image_Swt_Drag And Drop - Fatal编程技术网

Java SWT,在Windows上的动画背景上使用透明的拖动图像

Java SWT,在Windows上的动画背景上使用透明的拖动图像,java,windows,image,swt,drag-and-drop,Java,Windows,Image,Swt,Drag And Drop,我有一个基于画布的自定义小部件,它显示一些用户可以拖动排序的项目。当用户拖动某物时,我将使用被拖动项目的图像作为拖动图像: final DragSource source = new DragSource(this, DND.DROP_MOVE); source.setDragSourceEffect(new DragSourceEffect(this) { @Override public void dragStart(DragSourceEvent event) {

我有一个基于画布的自定义小部件,它显示一些用户可以拖动排序的项目。当用户拖动某物时,我将使用被拖动项目的图像作为拖动图像:

final DragSource source = new DragSource(this, DND.DROP_MOVE);
source.setDragSourceEffect(new DragSourceEffect(this) {
    @Override
    public void dragStart(DragSourceEvent event) {
        event.image =   // do some stuff to generate a partially
                        // transparent image of the dragged item...
    }
});
这很好,直到我实现了在画布中设置项目的动画,以向用户指示如果发生拖放,项目将如何重新排列。也就是说,它在除Windows之外的所有平台(GTK、Mac)上都能完美工作。在Windows上,每当我移动鼠标时,平台都会对当前画布内容进行快照,在顶部合成拖动图像,并将(不透明)结果显示在屏幕上。显然,当鼠标不移动时,背景实际设置动画并改变时,这种机制会产生可怕的结果。拖动图像出现的区域在最后一次鼠标移动时仍显示内容,而拖动图像周围的区域将设置动画并更新


想到的解决方案是通过手动移动一个透明的、自定义形状的外壳以及鼠标来实现一个拖动图像。在我开始之前,我对这个问题的解释是否正确,是否有一个简单的解决方案可以修复Windows上动画背景下的拖动图像渲染?

在拖动过程中重画似乎是一个非常头痛的问题,并且有一个针对您的具体情况的报告。因此,您的解释是正确的,因为(在Windows上?)拖动不会导致重新绘制/更新基础控件(如果您自己强制执行,您只会得到很多奶酪)。

非常感谢您确认问题并分担痛苦。我只是实现了自己的DND处理。只要按下鼠标,我就会为鼠标移动事件安装一个全局事件过滤器,并使用一个透明的形状窗口作为拖动图像,我会随鼠标移动。这给了我额外的自由来处理拖动事件,即使鼠标实际上在我的目标小部件之外,但“拖动图像”仍然主要位于可接受的放置位置。