2014-11-01 62 views
1

很简单的问题: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

回答

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; 

     } 
0

翻译按钮后,你需要在那里结束了设置的位置。

所以,以后你把它翻译,做到这一点...

yourButton.setX(currX - mPrevX); 
yourButton.setY(currY - mPrevY); 

你的问题是,经过你翻译它的按键位置没有改变,所以当你再翻译它,它从原来的位置是。