0

我有一個可通過拖放操作移動到其他表格的項目。我希望這些行可以高亮顯示,我將focusable和focusableontouchmode設置爲true,將背景設置爲list_selector_background並使行可點擊。沒有OnTouchListener選擇工作正常,但如果我將onTouchListener設置爲行,它會立即啓動拖放過程,當我點擊它時。有沒有辦法將onTouchListener的延遲設置爲可以區分單擊和拖放過程的開始? (所以你一定要挺住該行的點擊開始拖動)使用OnTouchListener進行拖放操作時設置延遲

的OnTouchListener:

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

    } 
} 

該行:

teacherRow.setId(tid); 
teacherRow.setBackgroundResource(drawable.list_selector_background); 
teacherRow.setFocusable(true); 
teacherRow.setFocusableInTouchMode(true); 
teacherRow.setClickable(true); 
teacherRow.setOnTouchListener(new MyTouchListener()); 

我也試圖與一個OnClickListener來解決它行,但沒有工作要麼

+0

你應該提供一些你的代碼。這將有所幫助。 – abc667 2013-02-23 18:43:17

+0

已添加touch listnener代碼 – knigge 2013-02-23 18:56:55

回答

0

有沒有辦法設置onTouchListener的延遲,使其 可以區分一次點擊和一次拖動並開始一個拖動過程嗎?

我不知道我完全瞭解你想要做的,但看看下面的代碼是什麼:

 public boolean onTouch(final View view, MotionEvent motionEvent) { 
      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
       mHandler.postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         if (view.isPressed()) { 
          ClipData data = ClipData.newPlainText("", ""); 
          DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
            view); 
          view.startDrag(data, shadowBuilder, view, 0); 
          v.setVisibility(View.INVISIBLE); 
         } 
        } 

       }, (long) (1.5 * ViewConfiguration.getLongPressTimeout())); 
      } 
      return false; 
     } 

mHandler是一個簡單的Handler實例。