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.
Es wurde urkomisch ....: P –
wenn ich beginne, es jetzt zu bewegen, springt es in die obere Ecke –
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