で奇妙な問題が発生していOnDragListener
ます。私のターゲットビューはACTION_DROP
イベントを正常に取得して処理します。ただし、ACTION_DRAG_STARTED
orACTION_DRAG_ENDED
イベントを受け取ることはありません (実際、ドロップ以外のイベントを受け取ることはありません)。
何が原因でしょうか? ドロップがターゲットの外で発生した場合を処理できないため、問題です。
この質問を見つけましたが、答えは明確ではありませんでした。どんなアイデアでも大歓迎です。
私のドラッグ可能なビューにはこれがあります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;
}
そして、ターゲットビューにはこれがあります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;
}