2014-05-10 52 views
0

我有一個活動與幾個ImageViews,每個都有自己的OnDragListener和OnTouchListener。當我用兩根手指同時點擊顯示屏,並且同時點擊2張圖像時,應用程序有時會崩潰。如何阻止一次拖動多個項目

如何阻止另一個拖動的開始,並在實際拖動一個項目時觸及顯示?我試圖把setClicable(false)放到整個佈局中,但它不起作用。

class MyDragListener implements OnDragListener { 
     RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.game_layout); 

     @Override 
     public boolean onDrag(View dropView, DragEvent event) { 
      switch (event.getAction()) { 
       case DragEvent.ACTION_DRAG_STARTED: 
        mainLayout.setClickable(false); 
        return true; 

       case DragEvent.ACTION_DRAG_ENTERED: 
        // some code 
        return true; 

       case DragEvent.ACTION_DROP: 
        // some code 
        return false; 

       case DragEvent.ACTION_DRAG_ENDED: 
        mainLayout.setClickable(true); 
        // some code 
        return true; 

       default: 
        break; 
      } 

      return true; 
     } 
} 

編輯:一個想法來到我的腦海 - 單擊某個項目時,從每一個其他圖像刪除OnTouchListeners。但是,每次觸摸都會增加CPU的負擔。沒有更好的方法嗎? - >>還沒有工作

EDIT2: ACTION_DOWN - >inAction = true;它仍然無法正常工作。當我在另外一個拖動圖像並進行第二次,第三次......觸摸,它)下降的圖片或b更糟)NullPointerException異常

private final class MyTouchListener implements OnTouchListener { 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      Log.d(TAG, "" + inAction); 
      if(motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
       if(!inAction) { 
        inAction = true; 
        ClipData data = ClipData.newPlainText("", ""); 
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 
        view.startDrag(data, shadowBuilder, view, 0); 
        view.setVisibility(View.INVISIBLE); 
        return true; 
       } 
       else 
        return true; 
      } 
      else if(motionEvent.getAction() == MotionEvent.ACTION_UP) { 
       inAction = false; 
       return true; 
      } 
      else { 
       return false; 
      } 
     } 

EDIT3:我使用的風格,虛假android:windowEnableSplitTouch爲整個應用程序

<style name="MyTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen"> 
    <item name="android:windowEnableSplitTouch">false</item> 
    <item name="android:splitMotionEvents">false</item> 
</style> 

回答

0

您可以簡單地返回;如果一個標誌是真的。即,當任何聽衆被觸發時設置一個標誌。你沒有想過嗎?

+0

不幸的是,沒有工作。當我拿着一張圖片並用其他手指點擊別處時,操作系統仍會捕捉到該觸摸並干擾,就像我將拖動的圖片拖放到該地方一樣。 –

+0

你是否沉默ACTION_POINTER_DOWN和UP? http://developer.android.com/training/gestures/multi.html – Messer

+0

檢查我的EDIT2。原來我已經處理好了。 –