繁体   English   中英

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

[英]Double Tap and Drag listeners on the same view?

我试图拦截同一视图上的拖动事件以及双击事件,从而可以将视图拖动到放置位置,或者如果用户双击同一视图,则可以打开一个对话框。 问题是在设置View.DragShadowBuilder(view)后,使用SimpleOnGestureListener拦截MotionEvent.ACTION_DOWN事件时,永远不会调用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 ;

          }
     }


我之前遇到过同样的问题,我所做的是我在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);                        

}

希望这会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM