Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

虚列表显示图片异常 #62

Open
yonghu6666 opened this issue Aug 27, 2020 · 4 comments
Open

虚列表显示图片异常 #62

yonghu6666 opened this issue Aug 27, 2020 · 4 comments

Comments

@yonghu6666
Copy link

问题描述:
1.虚列表中的item是GLoader;
2.GLoader需要从网络中加载不同的图片;
3.虚列表的列表布局为竖向流动,溢出处理为水平滚动,且列表元素数量超过一屏;
4.在图片被加载之前(网络原因导致图片下载较慢),滚动虚列表多次,则会出现这个现象:存在一部分item,他们的GLoader的url不同,却显示相同的图片。
5.滑动虚列表后,原来图片显示异常的item恢复正常。

原因分析:
在网络图片被加载之前,多次滑动虚列表,会给同一个item,添加多个回调函数,而这些回调函数带来的texture,其url是不同的。所以出现上述问题。

解决办法:
修改farirygui源码,在GLoader.onExternalLoadSuccess(texture)的开始处,判断GLoader的url与传入的texture的url是否相同,如果不同,则直接跳出该方法。

可以使用更优雅的解决办法,在执行GLoader.loadExternal()时,先清除旧的回调函数,然后再添加新的回调。但经过跟踪调试,未在对应的laya库中,找到清除旧回调函数的有效方法。

@xiaoguzhu
Copy link
Member

异步的东西,回来的时候当然要判断。看《教程 列表》关于虚拟列表的注意事项。

@yonghu6666
Copy link
Author

这种情况下,虽然Gloader是一个异步操作,即加载的网络图片,但在虚列表的itemRenderer方法中,是直接给item的GLoader的url赋值一个网络图片的url,在这里并没有直接编写异步代码,即

item.gloaderObj.url = 'a net url';

所以,“异步……回来的时候要判断”,是指不修改源码,而是实现GLoader的一个子类,并重写onExternalLoadSuccess()方法,进行判断处理吗

@xiaoguzhu
Copy link
Member

可以这样理解。

@yonghu6666
Copy link
Author

好的,非常谢谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants