Android - 用setTransationX()移动按钮
问题描述:
很简单的问题:Android - 用setTransationX()移动按钮
假设我们有一个名为btnMove的按钮,我们要移动它。为了移动它,我想使用setTranslationX和setTranslationY。
为了做到这一点,我写了下面的代码:
public boolean onTouch(View view, MotionEvent event){
float currX,currY;
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
{
mPrevX = event.getRawX();
mPrevY = event.getRawY();
break;
}
case MotionEvent.ACTION_MOVE:
{
currX = event.getRawX();
currY = event.getRawY();
btnMove.setTranslationX(currX - mPrevX);
btnMove.setTranslationY(currY - mPrevY);
break;
}
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
非常简单。我的问题是,一旦我们移动了按钮,如果我再次移动它,它就会回到起始位置,然后按照所绘制的矢量移动。事情是我不希望它在移动之前回来,我希望它从我放弃它的地方移开!
我试图寻找fillAfter(true)之类的东西,但似乎只适用于动画。
希望我们会尽快想出解决办法:)
BRO
答
我已经尝试设置我的按钮的X,但我得到了错误的东西。粘土,仍然与你的技术,它得到了错误,因为currX - mPrevX是按钮后面的矢量,而不是实际的位置。例如,如果你只是点击你的按钮,矢量是0,你的按钮将被发送到位置0.这不是我们想要的。
我能够通过使用setTranslationX并仅使用setX(ButtonPreviousX + Vector)来修复它,见下文。
谢谢你的提示,虽然
我们可以看到在我的代码,我干脆放弃了setTranslationX,有人可以解释我为什么setTranslationX是得到它错了吗?
这是我最后的代码工作:
public boolean onTouch(View view, MotionEvent event){
float currX,currY;
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN: {
mPrevX = event.getRawX();
mPrevY = event.getRawY();
btnPrevX = btnMove.getX();
btnPrevY = btnMove.getY();
break;
}
case MotionEvent.ACTION_MOVE:
{
currX = event.getRawX();
currY = event.getRawY();
btnMove.setX(btnPrevX + currX - mPrevX);
btnMove.setY(btnPrevY + currY - mPrevY);
break;
}
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
答
翻译按钮后,你需要在那里结束了设置的位置。
所以,以后你把它翻译,做到这一点...
yourButton.setX(currX - mPrevX);
yourButton.setY(currY - mPrevY);
你的问题是,经过你翻译它的按键位置没有改变,所以当你再翻译它,它从原来的位置是。