awtk icon indicating copy to clipboard operation
awtk copied to clipboard

一个页面带有gif控件,关闭这个页面时,有时在屏幕留下残影

Open ZhidongYa opened this issue 2 years ago • 11 comments

我在一个项目上应用gif控件,一个xml文件 image 然后设计一个按钮,点击它触发一个事件, 就是先打开这个界面,然后又关闭, 如下图程序所示 busying_win = window_open("ui_busying_page"); window_close(busying_win); 但这样会产生一个现象,快速点击会在屏幕留下残影,如下图所示》转圈圈 ad58aa63f0773c992c8dca42682bbf8 经分析源码发现可能是异步导致,推测是,关闭界面时没有及时销毁GIF控件,留下残影,然后修改代码如下图所示就没有出现上述情况 busying_win = window_open("ui_busying_page"); widget_destroy(gif), usleep(20000), window_close(busying_win); 现在我的问题是如果不用这个延迟usleep(20000),有什么办法解决 谢谢

ZhidongYa avatar Oct 26 '23 14:10 ZhidongYa

为什么打开之后马上就关闭?

xianjimli avatar Oct 29 '23 03:10 xianjimli

为了篇幅,我把中间部分程序省掉了,你可以在中间加一个usleep 500ms,但当你连续点击多次按钮,短时间多次触发该事件,就有可能在屏幕上留下残影。我发现这种情况下ret = window_close(busying_win)的ret为0,说明界面是关闭成功了。那么这个残影是怎么导致的?

为什么打开之后马上就关闭?

ZhidongYa avatar Oct 29 '23 06:10 ZhidongYa

busy_process 这是gif控件

ZhidongYa avatar Oct 29 '23 06:10 ZhidongYa

PC上能重现不,如果能重现,发给我看看。如果不能,你在微信群里问下。

xianjimli avatar Oct 29 '23 09:10 xianjimli

你指的是发个短视频给你看看?

ZhidongYa avatar Oct 29 '23 14:10 ZhidongYa

https://github.com/zlgopen/awtk/assets/93625836/5c60ced3-01f9-4a2e-9191-ecf8ba4dfd50

ZhidongYa avatar Oct 29 '23 15:10 ZhidongYa

你的窗口是透明的,请看下面的文档,有介绍如何解决透明窗口残影的问题 http://awtk.zlg.cn/docs/awtk_docs/FAQ/1.AWTK.html#%E5%BD%93%E5%BA%94%E7%94%A8%E7%94%BB%E9%9D%A2%E5%87%BA%E7%8E%B0%E6%AE%8B%E5%BD%B1-%E6%AE%8B%E7%95%99%E5%9B%BE%E5%83%8F-%E6%97%B6-%E8%AF%A5%E6%80%8E%E4%B9%88%E5%A4%84%E7%90%86

WNsACE avatar Oct 30 '23 02:10 WNsACE

窗口透明是什么意思?我的界面背景是是白色,所以看不见。我设成白色,依然会有残影 e4bbc323027ee0f70c8d9b189cc57df

ZhidongYa avatar Nov 01 '23 12:11 ZhidongYa

你帖子上面的 popup 的背景被设置为 #00000000,这个就是透明的意思啊,你这个白色窗口又是什么意思呢?你把上面的 popup 的背景色设为 #FFFFFFFF 吗? 但是这个窗口是否还要消失呢?如果这个窗口需要消失的话,还是会有整个窗口的残影的,只要你涉及这种多图层的半透融合效果,都需要按照文档里面的做法来处理,否则都是有残影的。

WNsACE avatar Nov 02 '23 04:11 WNsACE

你好,可不可以通过先销毁子控件(比如GIF),再关闭界面的方式消除残影问题?如果是,我发现widget destroy这方面的函数好像都是异步销毁(idle add函数),请问有没有同步销毁控件的函数

ZhidongYa avatar Nov 07 '23 00:11 ZhidongYa

重点不在控件上面,是机制上面: 1,一般的 GUI 都不处理 lcd 为透明的情况,因为正常 lcd 就是需要有颜色的,所以对透明的情况就不处理了,所以出现残影的问题。 2,同时由于 lcd 有可能是透明的,导致颜色混合公式要变复杂了(具体你可以谷歌一下),所以导致性能下降的问题,所以默认会不处理这种背景色为半透明的情况的 所以 awtk 默认不处理 lcd 为半透明的情况,所以做了一些优化,所以需要根据文档上面的说明来修改配置达到支持 lcd 透明情况。

WNsACE avatar Nov 08 '23 02:11 WNsACE