2016-07-20 176 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