【UE·UI篇】ListView使用经验总结

本文分享了在UE4中使用ListView时遇到的问题及解决经验,包括如何关闭和自定义滚动条,实现鼠标左键滚动,以及处理ListView与Button交互导致的滚动失效。此外,还探讨了通过源码阅读解决问题的方法。
摘要由CSDN通过智能技术生成

这篇文章用来记录我在使用ListView遇到的一些问题和经验。 虽然是写的ListView,不过TileView、ScrollBox组件大部分经验也能适用。
github工程

关于ListView的基本使用前人总结过不少:


关于ListView的滚动条(ScrollBar)

ListView的滚动条丑不拉几的,所以经常会有以下需求:

如何关闭滚动条的显示?

调用方法SetScrollBarVisibility。参数是ESlateVisiblity,设成Collapsed即可。
在这里插入图片描述
如何想要不运行就能在蓝图里预览,请连上EventPreConstruct
在这里插入图片描述

如何自定义滚动条的样式?

UE自带的ListView不支持
如果硬要做就必须改源码或者从头自己写一个ListView。(UE你给点劲儿啊,Unity的UGUI都比你好用多了。。。)
在这里插入图片描述


关于ListView的滚动功能

如何实现鼠标左键滚动?

ListView、TileView、ScrillBox这种带滚动条的自带鼠标右键滚动。但是我就是想左键滚动,也有办法。
方法1

  • ProjectSetting中勾选UseMouseForTouch。Touch就是手机、平板等设备的触屏功能。没错这些带滚动条的组件是支持触屏滚动的,所以只要把鼠标模拟Touch选上就行。勾上以后屏幕会出现一个很丑的虚拟摇杆,把DefaultTouchInterface设为空即可。
    在这里插入图片描述

方法2

  • 调用SetScrollOffset函数可以设置滚动条偏移。然后检测鼠标是否在UI上,再根据滑动的值来增加或者减少这个偏移量。这个做起来就很麻烦了。时间有限我就只研究了下这个SetScrollOffset的参数是干嘛用的。这个偏移的取值范围是0到ListView子物体的个数。它的效果可以演示如下:

在这里插入图片描述

如果是TileView这种一行有多列的是这个情况:
在这里插入图片描述

如何让ListView子物体滚到视野中?
  • 调用ScrollItemIntoView。将特定子物体滚到视野中
  • 调用ScrollIndexIntoView。将第几个子物体滚到视野中。
子物体有Button导致ListView不能滚动了怎么办?

找到Button的Interaction里的ClickMethod和TouchMethod选择Precisexxx那个选项。意思是精确点击。也就是说当你点击Button然后进行滑动时这个时候不会触发Button事件而会触发滑动事件。而当你松开时才会触发Button事件。
在这里插入图片描述


基本上想到的就这些了,如果有别的以后还会补充。
顺便多说几句,关于用Touch来实现鼠标左键滑动的功能我是怎么想出来的。所谓授人以鱼不如授人以渔嘛。

一开始谷歌“ue leftclick scroll”也好,“ue scroll without scrollbar"都没有得到什么满意的结果。后来就开始看源码了。ListView引用了一个SListView,SListView又继承自STableViewBase。
在这里插入图片描述
然后在STableViewBase.h发现了这几个函数,
在这里插入图片描述
尝试断点,发现左键点击并不会走OnMouseEnter函数。然后看到OnTouch相关的函数。所以想到了用Touch来实现的思路。之后再搜索”"ue mouse touch**这几个关键词就得出了答案。

总结起来,开源真香

在这里插入图片描述

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值