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实例。