当前位置: 首页 > 知识库问答 >
问题:

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

闾丘博超
2023-03-14

我试图拦截同一视图上的拖动事件以及双击事件,这样,如果用户双击同一视图,我可以将视图拖动到放置位置或打开对话框。问题在于使用SimpleOnGestureListener拦截MotionEvent时。设置View后的ACTION_DOWN事件。DragShadowBuilder(视图),永远不会调用onDoubleTap。关于如何允许拖动和双击视图,有什么想法吗?我想有一种可能是取消这个视图。在MotionEvent上启动拖动。ACTION_CANCEL或SimpleOnGestureListener的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 ;

          }
     }

共有1个答案

唐兴发
2023-03-14


我以前遇到过同样的问题,我所做的是我移动了拖拽

因此您可以改用onLongPress

@Override
public void onLongPress(MotionEvent motionEvent)   {             

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

}

希望这对你有帮助。

 类似资料:
  • 问题内容: 我有一个app.js,用于在接收到一些POST数据时触发两个事件: 将POST数据插入数据库 使用WebSocket向客户端发送消息 这是 app.js (仅重要的 几 行) 这是 server.js (仅重要的 几 行) 我想要实现的是以侦听应用程序相同端口的方式设置WebSocketServer。我考虑过将 服务器 var从 app.js 传递到 server.js, 但是 我认为

  • @覆盖公共void onBindViewHolder(@NonNull ViewHolder holder,int位置){ 在onBindViewHolder中,我想调用另一个活动,但每次调用侦听器时,都会打开同一个活动。注意:Recycler是通过另一个cardview活动从MYSQL获取值的

  • 我正在尝试通过拖放创建一个可重新排序的。 基本上,当我在中拖动一些东西时,它应该根据拖动情况重新排序。 我有这个,里面有6个。 所以看起来就像下面的截图 我已经按照下面的代码在中为LongClickListner和DragListener注册了所有 因此,当您将红色的拖动到灰色的时,将调用。然后,我只需移除红色的并将其添加到已结束的灰色的索引中,这样我就可以实时重新排序。因此,当我在中移动时,我得

  • 问题内容: 我有主要的应用程序在哪里与值表。然后,我单击“添加”按钮,新的CUSTOM(我自己创建)出现了JDialog类型弹出窗口。在这里,我可以输入值,打一些勾,然后单击“确认”。因此,我需要从对话框中读取该输入,以便可以将此值添加到主应用程序中的表中。按下“确认”按钮时如何收听,以便在此之后可以读取该值? 问题答案: 如果在用户按下后对话框消失,请确认: 你希望有对话的行为如同一个 模态 的

  • 我有一个有2个元素的回收器视图。我想添加2个按钮来做不同的事情(取决于回收器视图的哪个元素。怎么可能做到这一点?我的元素是文本视图 设置ctiv.kt 我的适配器。kt