

以下のようにボタンを押すとimageviewの色が変わる様なアニメーションを指示しておりますが、例えばこのid=startのボタンが連続で押されると、またアニメーションが最初から起動してしまいます。（当たり前といえば当たり前なのですが）

質問したい内容として、例えば連続で同じボタンを押した時に、同じボタンの場合は最初からアニメーションがスタートしない。つまり、同じ信号の場合は無視する、のような指示をしたいと考えております。  
コードも汚いですし、無知で申し訳ないのですが、もしもやり方をご存知でしたらお伺い出来ますと幸いです。  
何卒よろしくお願いいたします。

[code]

        setContentView(R.layout.activity_main);
        image = (ImageView) findViewById(R.id.image);
    
        btnStart = (Button) findViewById(R.id.start);
        btnStart.setOnClickListener(new View.OnClickListener(){
    
            @Override
            public void onClick(View v) {
                startColorAnimation(image);
            }});
    
        btnStart = (Button) findViewById(R.id.start1);
        btnStart.setOnClickListener(new View.OnClickListener(){
    
            @Override
            public void onClick(View v) {
                startColorAnimation1(image);
            }});
    
[/code]

や

[code]

    public void startColorAnimation(View view){
        int colorStart = 0xFFffffff;
        int colorEnd   = 0xFF000000;
    
        ValueAnimator colorAnim = ObjectAnimator.ofInt(
                view, "backgroundColor", colorStart, colorEnd);
        colorAnim.setDuration(2000);
        colorAnim.setEvaluator(new ArgbEvaluator());
        colorAnim.setRepeatCount(100);
        colorAnim.setRepeatMode(ValueAnimator.REVERSE);
        colorAnim.start();
    }
    public void startColorAnimation1(View view){
        int colorStart = 0xfff53b6d;
        //int colorStart = view.getSolidColor();
        int colorEnd   = 0xFF000000;
    
        ValueAnimator colorAnim = ObjectAnimator.ofInt(
                view, "backgroundColor", colorStart, colorEnd);
        colorAnim.setDuration(2000);
        colorAnim.setEvaluator(new ArgbEvaluator());
        colorAnim.setRepeatCount(100);
        colorAnim.setRepeatMode(ValueAnimator.REVERSE);
        colorAnim.start();
    }
    
[/code]


CC BY-SA 3.0
2015-05-14T10:28:33.253
10173
2015-08-12T12:13:28.557
8765
question
android android-animation
同じ指示の時は、アニメーションへの指示を無視したい。


ValueAnimator
をメソッドのローカルではなくクラスのフィールドとして持つようにして、すでにValueAnimatorのオブジェクトが存在する場合は何もせずメソッドを抜けるようにしてみてはいかがでしょうか。

[code]

    public class MyActivity extends Activity {
    
      ValueAnimator anim;
    
      protected void onCreate() {
        super.onCreate()
        setContentView(R.layout.activity_main);
    
        Button btnStart = (Button) findViewById(R.id.start);
        btnStart.setOnClickListener(new View.OnClickListener(){
    
          @Override
          public void onClick(View v) {
            startColorAnimation(image);
          }
        });
      }
    
      public void startColorAnimation(View view){
    
        // アニメーションが実行済みなら何もしない
        if (anim != null) return;
    
        int colorStart = 0xFFffffff;
        int colorEnd   = 0xFF000000;
    
        anim = ObjectAnimator.ofInt(view, "backgroundColor", colorStart, colorEnd);
        anim.setDuration(2000);
        anim.setEvaluator(new ArgbEvaluator());
        anim.setRepeatCount(100);
        anim.setRepeatMode(ValueAnimator.REVERSE);
        anim.start();
      }
    }
    
[/code]

※一部省略しています

なお、上記のままでは一度しかアニメーションが実行できないため、再度アニメーションを実行できるようにするためにはどこかで `anim = null`
をする必要があります。


CC BY-SA 3.0
2015-05-14T11:07:00.393
10177
2015-05-14T11:07:00.393
450
10173
answer