0
あなたが助けてくれることを願っています。DragListener View.ACTION_DRAG_ENDEDは受信されていません
ドラッグアンドドロップでボードゲームをしている場合。ドラッグが開始されることがあるが、Drag.endedなどのコールバックが受信されないことがあるという問題があります。
私はDragListenerを持っているので、ドラッグがどのように開始できるかを把握することはできません。
また、このドラッグリスナーをボードのすべてのindividualuelフィールドに配置しました。
dragListener = new DragListener();
binding.getRoot().setOnDragListener(dragListener);
private class DragListener implements View.OnDragListener {
boolean moveReverted;
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
moveReverted = false;
break;
case DragEvent.ACTION_DRAG_ENTERED:
if (v instanceof PieceHolder)
((PieceHolder) v).setIsHighlighted(true);
break;
case DragEvent.ACTION_DRAG_EXITED:
if (v instanceof PieceHolder)
((PieceHolder) v).setIsHighlighted(false);
break;
case DragEvent.ACTION_DROP:
Timber.d("Action dropped: %s", event.getAction());
if (!(v instanceof PieceHolder)) {
return false;
}
PieceHolder pieceHolderTo = (PieceHolder) v;
pieceHolderTo.setIsHighlighted(false);
Move move = ((PieceHolder) event.getLocalState()).getMove();
move.to = pieceHolderTo.getPosition();
if (pieceHolderTo.hasPiece() || !checkAndCalculatePoints(move)) {
return false;
}
pieceHolderTo.setPiece(move.piece);
break;
case DragEvent.ACTION_DRAG_ENDED:
if (!event.getResult() && !moveReverted) {
moveReverted = true;
revertDrag(((PieceHolder) event.getLocalState()).getMove());
}
default:
break;
}
return true;
}