如何让onDragListener和onTouchListener一起工作?

5
我使用onDragListener来拖动屏幕上的对象,这部分工作正常。但是我需要在拖动时检查屏幕的x,y坐标。我重写了onTouch方法,它也很好用。但是一旦我拖动了对象,ontouch监听器就不起作用了。我无法让两个监听器一起工作。我不知道为什么无法同时工作。
以下是拖动的代码:
ima.setOnLongClickListener(new View.OnLongClickListener() {
         @Override
         public boolean onLongClick(View v) {
            ClipData.Item item = new ClipData.Item((CharSequence)v.getTag());
            String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
            ClipData dragData = new ClipData(v.getTag().toString(), 
            mimeTypes, item);

            // Instantiates the drag shadow builder.
            View.DragShadowBuilder myShadow = new DragShadowBuilder(ima);

            // Starts the drag
            v.startDrag(dragData,  // the data to be dragged
            myShadow,  // the drag shadow builder
            null,      // no need to use local data
            0          // flags (not currently used, set to 0)
            );
            return true;
         }
      });

      // Create and set the drag event listener for the View
      ima.setOnDragListener( new OnDragListener(){
         @Override
         public boolean onDrag(View v,  DragEvent event){
           switch(event.getAction())                   
           {
            case DragEvent.ACTION_DRAG_STARTED:
               System.out.println("Action is DragEvent.ACTION_DRAG_STARTED");
               break;
            case DragEvent.ACTION_DRAG_ENTERED:
               Log.d(msg, "Action is DragEvent.ACTION_DRAG_ENTERED");
               break;
            case DragEvent.ACTION_DRAG_EXITED :
               Log.d(msg, "Action is DragEvent.ACTION_DRAG_EXITED");
               break;
            case DragEvent.ACTION_DRAG_LOCATION  :
               Log.d(msg, "Action is DragEvent.ACTION_DRAG_LOCATION");
               right=ima.getRight();
               left=ima.getLeft();
               top=ima.getTop();
               bottom=ima.getBottom();
               System.out.println("Start Touch "+right+" "+top+" "+left+" "+bottom);
              /*  if(x_cord>left&&y_cord>top&&x_cord<right&&y_cord<bottom){
                   System.out.println("GONE");
                   ima.setVisibility(View.GONE);
               }*/
               break;
            case DragEvent.ACTION_DRAG_ENDED   :
                   System.out.println( "ACTION_DRAG_ENDED event");  
               break;
            case DragEvent.ACTION_DROP:
              Log.d(msg, "ACTION_DROP event");
               break;
            default: break;
            }
            return true;
         }
      });

以下是触摸监听器的代码:
@Override
  public boolean onTouchEvent(MotionEvent event) {

         final int action = event.getAction();
            switch (action & MotionEvent.ACTION_MASK) {

                case MotionEvent.ACTION_DOWN: {
                    x_cord = (int) event.getX();
                       y_cord = (int) event.getY();
                    String text = "You click at x = " + event.getX() + " and y = " + event.getY();
                    //Toast.makeText(this, text, Toast.LENGTH_LONG).show();
                    System.out.println(text);
                    break;
                }

                case MotionEvent.ACTION_MOVE:{
                    x_cord = (int) event.getX();
                       y_cord = (int) event.getY();
                    String text = "You click at x = " + event.getX() + " and y = " + event.getY();
                   // Toast.makeText(this, text, Toast.LENGTH_LONG).show();
                 System.out.println(text);
                    break;
                }

            }
            return true;
}
1个回答

2
将相同的拖动监听器也放在填充整个屏幕的视图上,这样不会在所有地方调用ACTION_DRAG_LOCATION吗?(在这种情况下,您将不需要触摸侦听器)

如果我们使用WindowManager在窗口上绘制,如何获取更新后的坐标? - Ganesh Jogam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接