2017-07-02 10 views
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; 
    } 

答えて

0

私はなぜ自分の自己を見つけましたか。 ドラッグが実際に開始されましたが、startDragが呼び出されました。 私のGestureDetectionとの間の時間が - > startDrag()、 と短かったので、実際にドラッグプロセスを開始しなかったので、startDrag()はfalseを返しました。

だから、解決策は、(秀シンプル)であった:

前:

startDrag(null, new ImageDragShadowBuilder(pieceView), this, 0) 
    Timber.d("Dragging started"); 
    refreshView(); 

ソリューション:

if (startDrag(null, new ImageDragShadowBuilder(pieceView), this, 0)) { 
    Timber.d("Dragging started"); 
    refreshView(); 
    }