1.简述
试想这样一个移动端的触摸场景:不要拖动该控件,仅松开手指/鼠标后处理,可不可行?
其实很简单,按下时记录初始状态,移动时设置一个标记位,如果触发了移动,那么松开时根据这个标志位的情况来执行后续逻辑即可。
类似这样:
--处理按下事件
function YourPanel:MouseButtonDown(InGeometry, InGestureEvent)
self.m_NotMove = true
end
--处理移动事件
function YourPanel:MouseMove(InGeometry, InGestureEvent)
self.m_NotMove = false
end
--处理抬起事件
function YourPanel:MouseButtonUp(InGeometry, InGestureEvent)
if self.m_NotMove then
--do something ,如果触发了move那么此处跳过
end
end
我们之前实现过基础的功能:可以参考以下文章
UE4中触摸屏的拖拽缩放功能——lua实现
到这里为止一切正常,不过此处测试华为机型时,有意思的来了,手指按下时,经常会走到MouseMove里去,导致后续逻辑无法正常运行,猜测是华为机型采样灵敏度高或底层开启了UseHighPrecisionMouseMovement高精度鼠标移动引起的
2.处理方法
找到了原因,可以提供两种思路:一类是针对机型修改优化;二是在应用层对偏移的位置做判断,比如移动距离大于一个单位时才判定为移动
--处理移动事件
function YourPanel:MouseMove(InGeometry, InGestureEvent)
local changepos = (thisPos - self.m_Offset)
if math.abs(changepos.X) > 1 or math.abs(changepos.Y) > 1 then
self.m_NotMove = false
end
end