2

このコードを使用してドラッグ アンド ドロップを作成しています。

private final class MyTouchListener implements OnTouchListener {
    public boolean onTouch(View view, MotionEvent motionEvent) {
      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        ClipData data = ClipData.newPlainText("", "");

        GlobalTouchX = (int) motionEvent.getX();
        GlobalTouchY = (int) motionEvent.getY();

        shadowBuilder = new MyDragShadowBuilder(view);       

        view.startDrag(data, shadowBuilder, null, 0);

        CurrentDragImage = (ImageView)view;
        view.setVisibility(View.GONE);

        return true;
      } else {
      return false;
      }
    }
  }

ドロップを待たずにドラッグメソッドを中断するにはどうすればよいですか、またはドロップイベントをプログラムで呼び出すことができますか? 私は多くの方法を試しましたが、うまくいきませんでした。たとえば、ここで中断できれば素晴らしいことです。

MainRelative.setOnDragListener(new OnDragListener() {                  
  public boolean onDrag(View v, DragEvent event) {

  int action = event.getAction();

  switch (event.getAction()) {

  case DragEvent.ACTION_DRAG_LOCATION:    

        //!!!!!!!!!!!!!!!
        //HERE I WANT TO INTERRUPT DRAG EVENT ON SOME CONDITION
        //!!!!!!!!!!!!!!!

       break;

  case DragEvent.ACTION_DROP:

       MyOnDrop(v, event, true);                  

       break;
  }

return true;}
});
4

1 に答える 1

0

モーションをインターセプトする 1 つの方法は、ViewGroup クラスの onInterceptTouchEvent(MotionEvent me) メソッドをオーバーライドすることです. このメソッドは、ビューにドラッグしている場合に呼び出されます. したがって、インターセプトする必要がある場合は、このメソッドにロジックを配置する必要があります. .

たとえば、FrameLayout を使用して子ビューを保持する場合などです。次に、この FrameLayout クラスを拡張する新しいクラスを作成し、 onInterceptTouchEvent(MotionEvent me) メソッドをオーバーライドする必要があります。

class NewFrameLayout extends FrameLayout{


    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

     ///Place your logic here to intercept the dragging event


        /*
         * This method JUST determines whether we want to intercept the motion.
         * If we return true, onMotionEvent will be called and we do the actual
         * work here.
         */

        /*
        * Shortcut the most recurring case: the user is in the dragging
        * state and he is moving his finger.  We want to intercept this
        * motion.
        */
    }
}
于 2013-03-05T17:25:02.040 に答える