2014-02-09 35 views
0

我试图拦截拖动事件以及同一视图上的双击事件,从而可以将视图拖到放置位置,或者如果用户双击相同视图,则可以打开对话框。问题是在设置View.DragShadowBuilder(view)后,使用SimpleOnGestureListener拦截MotionEvent.ACTION_DOWN事件时,onDoubleTap从不会被调用。有关如何让视图被拖动以及双击的任何想法?我想可能是取消view.startDrag在SimpleOnGestureListener的MotionEvent.ACTION_CANCEL或onSingleTapUp方法上,但到目前为止,我还没有想出一种方法来取消拖动,如果这可以工作。谢谢。双击并拖动同一视图上的侦听器?

在适配器getView:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     // AlbumHolder holder = null; 
     if(row == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 
     } 


    final GestureDetector gdt = new GestureDetector(getActivity(),new GestureListener(textview,storyItem)); 
       textview.setOnTouchListener(new View.OnTouchListener() { 

        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
          action = event.getActionMasked(); 
          return gdt.onTouchEvent(event); 

        } 
       }); 

在活动之外适配器:

private class GestureListener extends SimpleOnGestureListener { 

     @Override 
      public boolean onDown(MotionEvent motionEvent) { 

      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 

        ClipData data = ClipData.newPlainText("", ""); 
        DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 
        view.startDrag(data, shadowBuilder, view, 0); 
        return true; 


        } 

       return true; 
      } 


      @Override 
      public boolean onDoubleTap(MotionEvent e){ 
       Toast.makeText(getActivity(), "double tapped", Toast.LENGTH_SHORT).show(); 

       showDialog(); 

       return true ; 

      } 
    } 

回答

0


我面临同样的问题前,我所做的是我在一个移动的拖动&拖放操作​​手势检测器的事件。

所以你可以使用onLongPress代替

@Override 
public void onLongPress(MotionEvent motionEvent) {    

    ClipData data = ClipData.newPlainText("", ""); 
    DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view); 
    view.startDrag(data, shadowBuilder, view, 0);       

} 

希望这会帮助你。

相关问题