非常简单的问题:
我们假设我们有一个名为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
答案 0 :(得分:0)
翻译按钮后,您需要将其位置设置为最终位置。
因此,翻译后,请执行此操作...
yourButton.setX(currX - mPrevX);
yourButton.setY(currY - mPrevY);
您的问题是翻译后按钮位置没有变化,因此当您再次翻译它时,它将从原始位置开始。
答案 1 :(得分:0)
我已经尝试设置按钮的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;
}