我正在使用此代码来移动按钮。 正在移动,但按钮在开始移动时会向下滑动一点。触摸时,我还更改按钮的颜色。
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;
}
}
代码应该可以正常工作,但不起作用。如果代替
mPrevY = event.getY();
我输入
mPrevY = event.getY() + 65;
移动位置对于许多移动设备都工作正常,但不是全部,对于选项卡也不是。
谢谢。
尝试在ACTION_DOWN中使用event.getRawY() , event.getRawX()
而不是event.getY() , event.getX()
。