2014-11-01 78 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); 

你的問題是,經過你翻譯它的按鍵位置沒有改變,所以當你再翻譯它,它從原來的位置是。