2017-04-13 6 views
0

ボタンをY方向にドラッグアンドドロップするだけです。私はこの機能を達成しました。しかし、画面の境界を越えて消えてしまった。私の目標を達成するのを助けてください。ボタンをドラッグ&ドロップしますか?

は、ここに私のコード

public class ChoiceTouchListener implements View.OnTouchListener{ 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 

     int x = (int) motionEvent.getRawX(); 
     int y = (int) motionEvent.getRawY(); 
     DisplayMetrics metrics = getResources().getDisplayMetrics(); 


     switch (motionEvent.getAction() & MotionEvent.ACTION_MASK){ 
      case MotionEvent.ACTION_DOWN: 
       RelativeLayout.LayoutParams tparams = (RelativeLayout.LayoutParams) view.getLayoutParams(); 
       changey = y- tparams.topMargin; 
       break; 
      case MotionEvent.ACTION_UP: 
       break; 
      case MotionEvent.ACTION_POINTER_DOWN: 
       break; 
      case MotionEvent.ACTION_POINTER_UP: 
       break; 
      case MotionEvent.ACTION_MOVE: 
       RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams(); 


       params.topMargin = y-changey; 

       view.setLayoutParams(params); 
       break; 
     } 

     rootlayout.invalidate(); 

     return true; 
    } 
} 

答えて

1

あなたは、画面の境界に制限され、あなたのビューを作成するためにこれを使用することができます。

int width=cropperLayout.getLayoutParams().width;; 
     int height=cropperLayout.getLayoutParams().height; 
     switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 

       dX = v.getX() - event.getRawX(); 
       dY = v.getY() - event.getRawY(); 

       return true; 

      case MotionEvent.ACTION_MOVE: 

       if (width == windowWidth && height == windowHeight){} 
       else { 
        v.animate() 
          .x(event.getRawX() + dX) 
          .y(event.getRawY() + dY) 
          .setDuration(0) 
          .start(); 

        if (event.getRawX() + dX + width > windowWidth) { 
         v.animate() 
           .x(windowWidth - width) 
           .setDuration(0) 
           .start(); 
        } 
        if (event.getRawX() + dX < 0) { 
         v.animate() 
           .x(0) 
           .setDuration(0) 
           .start(); 
        } 
        if (event.getRawY() + dY + height > windowHeight) { 
         v.animate() 
           .y(windowHeight - height) 
           .setDuration(0) 
           .start(); 
        } 
        if (event.getRawY() + dY < 0) { 
         v.animate() 
           .y(0) 
           .setDuration(0) 
           .start(); 
        } 

        return true; 
       } 
+0

コード内に「v」とは何ですか? onTouchのビューパラメータ。 – Hasnain

+0

onTouchにコードを書いて、vをビュー – Anmol

+0

で置き換えることができます。このコードを試してみましょう。 – Hasnain

関連する問題