【问题标题】:How to make onDragListener and onTouchListener work together?如何让 onDragListener 和 onTouchListener 一起工作?
【发布时间】:2014-03-26 14:47:35
【问题描述】:

我使用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;
}

【问题讨论】:

    标签: android ontouchlistener


    【解决方案1】:

    将(相同的)draglistener 也放在填满整个屏幕的视图上,这不是到处调用 ACTION_DRAG_LOCATION 吗? (在这种情况下你不需要触摸监听器)

    【讨论】:

    • 如果我们使用 WindowManager 在窗口上绘图,如何获取更新的坐标
    猜你喜欢
    • 2015-10-01
    • 2017-06-11
    • 2014-01-12
    • 2020-11-03
    • 2011-03-08
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多