2016-08-19 6 views
1

私はドラッグ可能なビューを作成し、ドロップされたビューからドロップターゲットビューまでの距離に応じてドロップターゲットビューのアルファを変更しようとしています。このためには、ドラッグされたビューの現在の位置を継続的にチェックする方法が必要です。私はOnTouchListenerを使って実装しようとしていました。クラスMyTouchListenerためモーションイベント 'MotionEvent.ACTION_MOVE'がタッチに登録されていません

myTextView.setOnTouchListener(new MyTouchListener()); 

コード:MainActivity's方法onCreate

コード

class MyTouchListener implements View.OnTouchListener { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 

     Log.i("i", "Touched"); 

     switch (motionEvent.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
       ClipData clipData = ClipData.newPlainText("", ""); 

       View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 

       view.startDrag(clipData, shadowBuilder, view, 0); 

       view.setVisibility(View.INVISIBLE); 

       break; 
      } 

      case MotionEvent.ACTION_MOVE: { 
       Log.i("i", "this one is never called"); 
       break; 
      } 
     } 

     return true; 
    } 
} 

私は私のTextViewのドラッグを開始した後、出力をログには2倍と他には何を "感動しました"。 MotionEvent.ACTION_MOVEが呼び出されないケースを誰にでも教えてもらえますか? これは、私がしようとしていることを実装する方法でない場合は、より適切な方法に私を導くことができますか?

答えて

1

それは

view.startDrag(clipData、shadowBuilder、ビュー、0)とは何かを持っています。

この行をコメントアウトすると、ACTION_MOVEイベントは正常に動作します。私の意見では、こののstartDrag方法は何とか元ビューにあらゆるリスニングを排除します。それをドラッグしている間は、オブジェクトがドラッグされているため、他のオブジェクトがドラッグイベントを聞くことができ、それ以外は何も聞こえないように、画面上の他のすべての可視ビューに信号を送ります。

UPDATE: onTouch() ACTION_MOVE case is not called while dragging

: 私は実際にちょうどここに密接に同じ答えと同じ質問を見つけました
関連する問題