2017-04-13 3 views
0

Ich möchte nur eine Schaltfläche in Y-Richtung ziehen und ablegen. Ich habe diese Funktionalität erreicht. Aber es überschreitet Bildschirmgrenzen und ist verschwunden. Bitte helfen Sie mir, mein Ziel zu erreichen.Drag and Drop eine Taste?

Hier ist mein Code

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; 
    } 
} 

Antwort

1

diese Weise können Sie Ihre Sicht auf die Grenzen des Bildschirms beschränkt machen.

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

Was ist "v" in Ihrem Code? – Hasnain

+0

Ansichtsparameter von onTouch. Sie können den Code in onTouch schreiben und v durch Ansicht ersetzen – Anmol

+0

in Ordnung. Lass mich diesen Code ausprobieren. – Hasnain