2016-07-20 220 views
3

我知道如何將按鈕縮放到確定的值,但是有沒有一種方法可以在用戶每觸摸一次就增加/減少按鈕大小? 事情是這樣的:觸摸Android縮放按鈕

Button myButton = (Button)findViewById(R.id.myButton); 
    myButton.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       // Some timer action here or is there a better way? 
       v.setScaleX(v.getScaleX() + 0.1f); 
       v.setScaleY(v.getScaleY() + 0.1f); 
       return true; 
      } 
      else if(event.getAction() == MotionEvent.ACTION_UP) { 
       v.setScaleX(1); 
       v.setScaleY(1); 
       return true; 
      } 

      return false; 
     } 
    }); 

另一種思路 - 不工作:

myButton.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       Timer timer = new Timer(); 
       TimerTask timerTask = new TimerTask() { 
        @Override 
        public void run() { 
         myButton.setScaleX(myButton.getScaleX() + 0.1f); 
         myButton.setScaleY(myButton.getScaleY() + 0.1f); 
        } 
       }; 
       while(event.getAction() != MotionEvent.ACTION_UP){ //Seems to be an infinite loop 
        timer.schedule(timerTask, 100); 
       } 

      } 
      else if(event.getAction() == MotionEvent.ACTION_UP) { 
       v.setScaleX(1); 
       v.setScaleY(1); 
      } 

      return false; 
     } 
    }); 

,是有辦法做到整個事情與XML(可繪製和動畫)?

+0

[這裏](http://www.tutorialspoint.com/android/android_animations.htm)是一個很好的例子爲了你想要達到的目標。在本教程中,您可以設置動畫效果,而不是在教程中使用imageview。 – chejaras

回答

4

嘗試以下操作:

@Override 
public boolean onTouch(View v, MotionEvent motionEvent) { 
    int action = motionEvent.getAction(); 
    if (action == MotionEvent.ACTION_DOWN) { 
     v.animate().scaleXBy(100f).setDuration(5000).start(); 
     v.animate().scaleYBy(100f).setDuration(5000).start(); 
     return true; 
    } else if (action == MotionEvent.ACTION_UP) { 
     v.animate().cancel(); 
     v.animate().scaleX(1f).setDuration(1000).start(); 
     v.animate().scaleY(1f).setDuration(1000).start(); 
     return true; 
    } 

    return false; 
} 

這應該做的伎倆;)

+0

這工作正常,但你必須移動你的手指,而觸摸按鈕來增加尺寸。 – Maik

+0

我編輯了我的答案。嘗試一下,讓我知道,如果這是你在找什麼。 –

+0

我們走了,就是這樣! – Maik