2016-03-18 8 views
0

Ich benutze diesen Code, um eine Schaltfläche zu verschieben. Bewegung passiert, aber der Knopf rutscht ein wenig nach unten, wenn er sich bewegt. Ich ändere auch die Farbe der Schaltfläche bei Berührung.Motion-Ereignis von Touch funktioniert nicht ordnungsgemäß in Android

public boolean onTouch(View view, MotionEvent event) { 
     float currX,currY; 
     int action = event.getAction(); 

     Button gvup = (Button)findViewById(R.id.giveup); 
     gvup.setBackground(getResources().getDrawable(R.drawable.btn)); 

     switch (action) { 
      case MotionEvent.ACTION_DOWN: { 
       startClickTime = Calendar.getInstance().getTimeInMillis(); 
       mPrevX = event.getX(); 
       mPrevY = event.getY(); 
       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      } 
      case MotionEvent.ACTION_MOVE: 
      { 
       currX = event.getRawX(); 
       currY = event.getRawY(); 
       ViewGroup.MarginLayoutParams marginParams = new ViewGroup.MarginLayoutParams(view.getLayoutParams()); 
       marginParams.setMargins((int)(currX - mPrevX), (int)(currY - mPrevY),0, 0); 
       RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams); 
       view.setLayoutParams(layoutParams); 
       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      } 
      case MotionEvent.ACTION_CANCEL: 
       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      case MotionEvent.ACTION_UP: 
       long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime; 
       if(clickDuration < MAX_CLICK_DURATION) { 
        //click event has occurred 
        gvup.setBackground(getResources().getDrawable(R.drawable.btn)); 
        giveUp(); 
       } 
       break; 
     } 
     return true; 
    } 
} 

Der Code sollte perfekt funktionieren, funktioniert aber nicht. wenn anstelle von

mPrevY = event.getY(); 

Ich tippe

mPrevY = event.getY() + 65; 

Die Position der Bewegung funktioniert gut für viele mobile, aber nicht alle und auch nicht für Tabs.

Danke.

Antwort

0

versuchen Sie mit event.getRawY() , event.getRawX() anstelle von event.getY() , event.getX() in Ihrem ACTION_DOWN auch.

+0

Es wurde urkomisch ....: P –

+0

wenn ich beginne, es jetzt zu bewegen, springt es in die obere Ecke –

+0

Was meinst du? Wenn Sie die Schaltfläche nur verschieben möchten, sollten Sie die Ränder nicht ändern. Verwenden Sie 'view.setX ((int) (currX - mPrevX)' und 'view.setY ((int) (currY - mPrevY)' – Wukash