在同一视图上双击并拖动侦听器?

时间:2014-02-09 04:51:11

标签: android drag gesture ontouchlistener double-click

我试图拦截拖动事件以及同一视图上的双击事件,我可以将视图拖动到放置位置,或者如果用户双击同一视图,则打开一个对话框。问题是当使用SimpleOnGestureListener拦截MotionEvent.ACTION_DOWN事件时,在设置View.DragShadowBuilder(view)之后,永远不会调用onDoubleTap。关于如何允许拖动视图以及双击的任何想法?我想有可能在SimpleOnGestureListener的MotionEvent.ACTION_CANCEL或onSingleTapUp方法上以某种方式取消view.startDrag但是到目前为止我还没有想出一种取消拖动的方法,如果这样就可以了。感谢。

在适配器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 ;

          }
     }

1 个答案:

答案 0 :(得分:0)


我之前遇到了同样的问题,我做了什么是我在GestureDetector的onLongPress事件中移动了拖放操作。

所以你可以使用onLongPress而不是

@Override
public void onLongPress(MotionEvent motionEvent)   {             

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

}

希望这会对你有所帮助。