找回密码
 立即注册

QQ登录

只需一步,快速开始

RANDO
初级会员   /  发表于:2024-8-26 10:59  /   查看:816  /  回复:6
15金币
当前实现了自定义单元格展示多图片;

但是图片比较多的情况下可能比较占内存,想通过判断当前单元格是否在可视区域内,如果是,则渲染多图,不在就不渲染任何内容;
这种情况下需要监听滚动行为等,然后单元格是自定义实现的,需要去通知或者标记单元格不渲染内容,感觉有点低效..是否有更高效的方案,例如自定义单元格中有hook,然后可以触发到paint

最佳答案

查看完整内容

paint()方法是普通方法,不是监听事件,只会执行一次。 另外,如果会二次触发,那我们再给您提供一个思路:在自定义单元格类型的原型上增设一个标志位用以记录是否已经绘制过,如果绘制过便不再绘制,旨在保证对该单元格类型的每个实例都只绘制一次,且绘制后即永久存在。这里的“永久”与工作表生命周期保持一致。

6 个回复

正序浏览
Wilson.Zhang
超级版主   /  发表于:2024-8-26 17:47:31
7#
RANDO 发表于 2024-8-26 17:35
嗯,因为我发现单元格进入可视区域后会触发paint,离开不会;
当前我就是您说的这个方式处理的,也不出 ...

不客气!问题解决了就好,如有问题,欢迎继续发帖沟通。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-26 17:46:38
6#
RANDO 发表于 2024-8-26 15:08
触发滚动后,单元格到不可见区域,还会触发一次paint吗

paint()方法是普通方法,不是监听事件那样的工作机制,只执行一次。
另外,如果方法会二次执行,那也可以在自定义单元格类型原型设置一个标志位以记录是否已绘制过,如果绘制过则不再二次绘制,否则绘制之。
回复 使用道具 举报
RANDO
初级会员   /  发表于:2024-8-26 17:35:52
5#
Wilson.Zhang 发表于 2024-8-26 17:09
paint()方法是普通方法,不是监听事件,只会执行一次。
另外,如果会二次触发,那我们再给您提供一个思 ...

嗯,因为我发现单元格进入可视区域后会触发paint,离开不会;
当前我就是您说的这个方式处理的,也不出离开后的销毁,就让他渲染在那边了,因为单元格本身不大,只要对图做好压缩,即便是万级别的图片,也不会占太多内存;
谢谢
回复 使用道具 举报
RANDO
初级会员   /  发表于:2024-8-26 15:08:46
3#
Wilson.Zhang 发表于 2024-8-26 13:32
您好!单元格类型的paint方法的参数列表中包含了x、y坐标,可以根据这组数据判断单元格类型实例是否在页面 ...

触发滚动后,单元格到不可见区域,还会触发一次paint吗
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-26 13:32:47
2#
您好!单元格类型的paint方法的参数列表中包含了x、y坐标,可以根据这组数据判断单元格类型实例是否在页面范围内,如果在则绘制,否则不绘制。您可以尝试下该方案是否能满足您的需要。
回复 使用道具 举报
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-8-26 10:59:39
来自 4#
RANDO 发表于 2024-8-26 15:08
触发滚动后,单元格到不可见区域,还会触发一次paint吗

paint()方法是普通方法,不是监听事件,只会执行一次。
另外,如果会二次触发,那我们再给您提供一个思路:在自定义单元格类型的原型上增设一个标志位用以记录是否已经绘制过,如果绘制过便不再绘制,旨在保证对该单元格类型的每个实例都只绘制一次,且绘制后即永久存在。这里的“永久”与工作表生命周期保持一致。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部