2016-07-20 7 views
3

私はボタンを確定値にスケールする方法を知っていますが、ユーザーがタッチしている間、ボタンのサイズを時間ごとに増減する方法はありますか?このような 何か:Androidのスケールボタンon touch

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