OpenHarmony开发者论坛
标题: 【FAQ问题定位】(ARK)“触屏+触屏”hap内文本内容拖拽失败的问题分析 [打印本页]
作者: wangyeyu 时间: 2023-12-6 18:16
标题: 【FAQ问题定位】(ARK)“触屏+触屏”hap内文本内容拖拽失败的问题分析
“触屏+触屏” HAP内文本内容拖拽问题定位
1. 问题描述“触屏+触屏”HAP 内容拖拽问题是指第一个手指发起拖拽,第二个手指点击新位置,看不见cursor光标,抬起第一个手指,结果被拖拽内容原地不动。我们分阶段进行分析,先看看单手指拖拽文本内容到新位置是否能成功?首先打开”备忘录”中“蛋糕做法”文档,单指选中内容,长按进行拖拽,到达指定位置,抬起手指,问题来了。既不显示cursor光标位置,也拖拽不了内容到达新位置。
2. 分析问题经过一番折腾,发现将内容拖拽到HAP顶部,然后再进来,就显示光标了,当抬起手指,内容刚好拖拽到此处。于是比较到达顶部的日志:
发现拖拽到顶部,准确说离开了编辑区,执行了一个拖拽离开操作如①所示,再进来到文本首行执行了②,光标就显示了,抬起手指,拖拽成功。是不是只有从顶部离开、进入功能才正常?接着做了如下一个测试,从左右拖拽离开再进入,结果也会显示光标,拖拽也能成功。
为什么再次进入才能拖拽成功?是不是,进入后改变了什么状态,又比较了成功与失败的日志,发现抬起后,失败的 isDragging_ 是 false,如下图红框①所示:
离开再进入时将 isDragging_ 设置为true, 如绿框②所示。发起拖拽后谁修改了 isDragging_ 标志?日志中出现蓝色框③的操作,即就是取消拖拽操作,把isDragging_ 设置成了false。
查看代码,TouchTest时收集拖拽actutor时,在drag_event.cpp中执行了如下操作,被屏蔽的部分:
至此,存留两个疑问,1.单手拖拽(单焦点时)为什么在成功发起拖拽之后,取消拖拽操作(应该在发起拖拽之前,取消之前的拖拽操作),这就造成web_pattern.cpp 中的isDragging_ 状态混乱。 2.一旦执行了取消操作,另外一个焦点发起 TouchTest后会将之前的拖拽操作取消掉,这不是我们期望的。
干脆注释掉这两行,单手拖拽文本内容成功。
3. 深挖问题现在转到“触屏+触屏”HAP 内容拖拽。第一个手指发起拖拽,第二个手指点击新位置,看不见cursor光标,抬起第一个手指,结果被拖拽内容原地不动。
又测试了“触屏+鼠标”HAP 内容拖拽。一个手指发起拖拽,鼠标点击新位置,看见cursor光标,抬起手指,结果被拖拽内容原地不动。通过日志发现在web_pattern.cpp中,虽然还在拖拽框架发起拖拽的过程中,只有第二个手指或者鼠标抬起就会调用ResetDragAction()将 isDragging_ 设置为false, 并执行一系列取消拖拽操作.
void WebPattern::ResetDragAction()
{
auto frameNode = GetHost();
frameNode->SetDraggable(false);
auto eventHub = frameNode->GetEventHub<WebEventHub>();
auto gestureHub = eventHub->GetOrCreateGestureEventHub();
gestureHub->ResetDragActionForWeb();
if (!isDragging_) {
return;
}
isDragging_ = false;
LOGI("need to cancel web kernel drag action");
// cancel drag action to avoid web kernel can't process other input event
delegate_->HandleDragEvent(0, 0, DragAction:
RAG_CANCEL);
gestureHub->CancelDragForWeb();
}
if (info.GetButton() == MouseButton:
EFT_BUTTON && info.GetAction() == MouseAction::RELEASE) {
ResetDragAction();
}
void WebPattern::HandleTouchUp(const TouchEventInfo& info, bool fromOverlay)
{
ResetDragAction();
......
}
4. 结论1. web_pattern.cpp 仅适合单焦点操作;
2. isDragging_ 和拖拽框架中 发起拖拽为True,结束拖拽为 False状态存在差异;
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) |
Powered by Discuz! X3.5 |