gpt4 book ai didi

android - OnDragListener 未收到 DRAG_STARTED 或 DRAG_ENDED,但收到 ACTION_DROP

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:51:01 26 4
gpt4 key购买 nike

我在使用 OnDragListener 时遇到了一个奇怪的问题。我的目标 View 很好地获取了 ACTION_DROP 事件并对其进行了处理;但它从不接收 ACTION_DRAG_STARTEDACTION_DRAG_ENDED 事件(事实上它从不接收除 drop 之外的任何事件)。

这可能是什么原因造成的?这是一个问题,因为我无法处理掉落发生在目标之外的情况。

我找到了 this question但我不清楚答案。非常感谢任何想法。

我的可拖动 View 有这个 OnTouchListener:

@Override
public boolean onTouch(View v, MotionEvent ev) {
switch (ev.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
startPointX = ev.getX();
startPointY = ev.getY();
isOnClick = true;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (isOnClick) {
isOnClick = false;
// handle single click
}
break;
case MotionEvent.ACTION_MOVE:
if (isOnClick && movePassesThreshold(ev)) {
isOnClick = false;
draggableView.startDrag(...);
}
break;
default:
break;
}
return true;
}

目标 View 有这个OnDragListener:

@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
Log.v(TAG, "drag started");
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
Log.v(TAG, "drop");
// handle drop
break;
case DragEvent.ACTION_DRAG_ENDED:
Log.v(TAG, "drag ended");
break;
default:
return false;
}
return true;
}

最佳答案

这是 ViewGroup 的一个已知问题:

https://code.google.com/p/android/issues/detail?id=25073

按照该链接中的建议覆盖 dispatchDragEvent 函数对我有用:

@Override
public boolean dispatchDragEvent(DragEvent ev){
boolean r = super.dispatchDragEvent(ev);
if (r && (ev.getAction() == DragEvent.ACTION_DRAG_STARTED
|| ev.getAction() == DragEvent.ACTION_DRAG_ENDED)){
// If we got a start or end and the return value is true, our
// onDragEvent wasn't called by ViewGroup.dispatchDragEvent
// So we do it here.
onDragEvent(ev);
}
return r;
}

关于android - OnDragListener 未收到 DRAG_STARTED 或 DRAG_ENDED,但收到 ACTION_DROP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com