2016-07-20 8 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) является очень хорошим примером за то, чего вы пытаетесь достичь. Вместо изображения в учебнике вы можете анимировать свою кнопку. – 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

Смежные вопросы