2016-08-19 68 views
1

我試圖創建一個可拖動的視圖,並根據拖動視圖與放置目標視圖之間的距離來更改放置目標視圖的Alpha。爲此,我需要一種方法來持續檢查拖動視圖的當前位置。我試圖使用OnTouchListener來實現它。未註冊觸摸的運動事件'MotionEvent.ACTION_MOVE'

守則MainActivity's方法onCreate

myTextView.setOnTouchListener(new MyTouchListener()); 

代碼MyTouchListener類:

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,登錄 「觸摸」 兩次,沒有其他輸出。任何人都可以告訴我爲什麼案件MotionEvent.ACTION_MOVE永遠不會被調用? 如果這不是實現我想要做的事的方式,你能指導我更正確的方式嗎?

回答

1

它是與

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

如果您將此行註釋掉,則ACTION_MOVE事件將按照他們應該的方式工作。在我看來,這startDrag方法莫名其妙地消除任何聽原版查看。拖動它時會向屏幕上的其他每個可見視圖發出信號,表明有一個對象正在被拖動,以便其他對象可以偵聽拖動事件,除此之外沒有其他任何事情。

更新: 我其實只是發現了同樣的問題,密切了相同的答案在這裏: onTouch() ACTION_MOVE case is not called while dragging