- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在使用 OnDragListener
时遇到了一个奇怪的问题。我的目标 View 很好地获取了 ACTION_DROP
事件并对其进行了处理;但它从不接收 ACTION_DRAG_STARTED
或 ACTION_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/
我正在使用 view.startDrag() 开始拖动操作。拖动时,事件会在 OnDragListener 中接收。我还使用 DragShadowBuilder 在拖动时显示 View B 的最后一张
我正在制作一个带有自定义行和自定义适配器的 ListView 。我已将 OnTouchListener 和 OnDragListener 附加到 ListView 中的每个 View 。 如果拖放结果
我有一个扩展 DialogFragment 的类。我必须在拖动后立即获取对话的当前坐标。所以我在类中实现了 OnDragListener 并覆盖了 onDrag() 方法。但是我没有收到任何对 onD
我需要在使用 stopSelf() 激活监听器后停止此服务;然而,即使没有拖动事件,服务也会结束......在调用 StopService 之前,如何检测是否发生了拖动事件? m
我在我的应用程序中使用拖放功能。它工作正常。现在我在为 View 设置动画时遇到问题,如果 View 未放置在放置的 View 上,则 View 返回到其原始位置。 我已经通过 创建了我的阴影 Vie
如您所知,OnDragListener开始于 API 级别 11 我想使用它,但不幸的是,我不能,因为我的目标设备是 1.6 及更高版本(API 4)。 是否有任何替代的类似类/库/想法可能有帮助
我正在尝试弄清楚如何执行以下操作: 我有一个 Activity 和一个 fragment 充当一种抽屉导航(右侧)。在那个抽屉 fragment 中,我有一个 GridView 。目前,我可以长按该
我的应用程序有一个类 MarkedLine,它扩展了 View。此类的实例显示在 fragment 中。我希望用户能够做以下三件事: 通过“捏合”和“拉伸(stretch)”手势放大线条 触摸直线的任
我正在制作一个游戏应用程序,我需要在其中使用 onDraglistener 进行拖放,这是我在实现 onDraglistener 的类上所做的。 @Override public boolean
我正在使用 VideoView 播放视频。当我将它从原来的位置拖到新位置时,我想改变它的位置。我使用了以下代码: video_view.setOnDragListener(new OnDragList
我使用 onDragListener 在屏幕上拖动一个对象,这部分效果很好。但我还需要在拖动时检查屏幕的 x、y 坐标。我重写了 onTouch 方法,它也运行良好。但是一旦我拖动了对象,ontouc
我有一个使用 OnDragListener 的应用。 由于这仅在 API 级别 11 中引入,我正在寻找一个支持较低级别此功能的库(类似于 ActionBarSherlock for Fragment
我在使用 OnDragListener 时遇到了一个奇怪的问题。我的目标 View 很好地获取了 ACTION_DROP 事件并对其进行了处理;但它从不接收 ACTION_DRAG_STARTED 或
我正在尝试为谷歌地图 fragment 设置一个 onDrag 监听器,但无法触发拖动事件。由于 map 不直接支持拖动事件,我正在尝试为 View 实现一个拖动监听器。我知道 onMarkerDra
我是一名优秀的程序员,十分优秀!