一个页面带有gif控件,关闭这个页面时,有时在屏幕留下残影
我在一个项目上应用gif控件,一个xml文件
然后设计一个按钮,点击它触发一个事件, 就是先打开这个界面,然后又关闭, 如下图程序所示
busying_win = window_open("ui_busying_page"); window_close(busying_win);
但这样会产生一个现象,快速点击会在屏幕留下残影,如下图所示》转圈圈
经分析源码发现可能是异步导致,推测是,关闭界面时没有及时销毁GIF控件,留下残影,然后修改代码如下图所示就没有出现上述情况
busying_win = window_open("ui_busying_page");
widget_destroy(gif),
usleep(20000),
window_close(busying_win);
现在我的问题是如果不用这个延迟usleep(20000),有什么办法解决
谢谢
为什么打开之后马上就关闭?
为了篇幅,我把中间部分程序省掉了,你可以在中间加一个usleep 500ms,但当你连续点击多次按钮,短时间多次触发该事件,就有可能在屏幕上留下残影。我发现这种情况下ret = window_close(busying_win)的ret为0,说明界面是关闭成功了。那么这个残影是怎么导致的?
为什么打开之后马上就关闭?
这是gif控件
PC上能重现不,如果能重现,发给我看看。如果不能,你在微信群里问下。
你指的是发个短视频给你看看?
https://github.com/zlgopen/awtk/assets/93625836/5c60ced3-01f9-4a2e-9191-ecf8ba4dfd50
你的窗口是透明的,请看下面的文档,有介绍如何解决透明窗口残影的问题 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
窗口透明是什么意思?我的界面背景是是白色,所以看不见。我设成白色,依然会有残影
你帖子上面的 popup 的背景被设置为 #00000000,这个就是透明的意思啊,你这个白色窗口又是什么意思呢?你把上面的 popup 的背景色设为 #FFFFFFFF 吗? 但是这个窗口是否还要消失呢?如果这个窗口需要消失的话,还是会有整个窗口的残影的,只要你涉及这种多图层的半透融合效果,都需要按照文档里面的做法来处理,否则都是有残影的。
你好,可不可以通过先销毁子控件(比如GIF),再关闭界面的方式消除残影问题?如果是,我发现widget destroy这方面的函数好像都是异步销毁(idle add函数),请问有没有同步销毁控件的函数
重点不在控件上面,是机制上面: 1,一般的 GUI 都不处理 lcd 为透明的情况,因为正常 lcd 就是需要有颜色的,所以对透明的情况就不处理了,所以出现残影的问题。 2,同时由于 lcd 有可能是透明的,导致颜色混合公式要变复杂了(具体你可以谷歌一下),所以导致性能下降的问题,所以默认会不处理这种背景色为半透明的情况的 所以 awtk 默认不处理 lcd 为半透明的情况,所以做了一些优化,所以需要根据文档上面的说明来修改配置达到支持 lcd 透明情况。