2017-10-03 18 views
3

私は、ボタンのすぐ下にボタンと隠しボタンがある単純なプログラムを作成しようとしています。ユーザーが最初のボタンをクリックすると、2番目のボタンが滑らかなアニメーションを使用して表示されます。Android Fade In、Fade Outアニメーションの問題

最初時間:ユーザーはもう一度最初のボタンをクリックすると、第二ボタンがスムーズに私が登場すると消えるアクションをアニメーション化するAlpha Animationを使用していますが、私は次の問題に実行していますなど、消えますボタンをクリックすると、何も起こりません。もう一度ボタンをクリックすると、それが表示され、瞬時に消えます。ボタンの3番目のをクリックすると、「フェードイン」モーションがスムーズにアニメーション化されます。

:私はそれを第四の時間をクリックすると、それがスムーズに、「フェードアウト」運動などをアニメーション化してから...

以下

enter image description here enter image description here

は、この単純なプログラムのコードです

public class MainActivity extends AppCompatActivity { 
public Button toggleButton; 
public Button helloButton; 
public boolean isVisible = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    helloButton = (Button)findViewById(R.id.helloButton); 

    toggleButton = (Button)findViewById(R.id.toggleButton); 
    toggleButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (!isVisible) { 
       //helloButton.setVisibility(View.VISIBLE); 
       AlphaAnimation fadeInAnimation = new AlphaAnimation(0, 1); // start alpha, end alpha 
       fadeInAnimation.setDuration(250); // time for animation in milliseconds 
       fadeInAnimation.setFillAfter(true); // make the transformation persist 
       fadeInAnimation.setAnimationListener(new Animation.AnimationListener() { 
        @Override 
        public void onAnimationEnd(Animation animation) { 
         helloButton.setVisibility(View.VISIBLE); 
        } 

        @Override 
        public void onAnimationRepeat(Animation animation) { } 

        @Override 
        public void onAnimationStart(Animation animation) { 
         helloButton.setVisibility(View.GONE); 
        } 
       }); 
       helloButton.startAnimation(fadeInAnimation); 
       isVisible = true; 
       System.out.println("Button is invisible... Time to Fade IN"); 
      } 
      else { 
       //helloButton.setVisibility(View.GONE); 
       AlphaAnimation fadeOutAnimation = new AlphaAnimation(1, 0); // start alpha, end alpha 
       fadeOutAnimation.setDuration(250); // time for animation in milliseconds 
       fadeOutAnimation.setFillAfter(true); // make the transformation persist 
       fadeOutAnimation.setAnimationListener(new Animation.AnimationListener() { 
        @Override 
        public void onAnimationEnd(Animation animation) { 
         helloButton.setVisibility(View.GONE); 
        } 

        @Override 
        public void onAnimationRepeat(Animation animation) { } 

        @Override 
        public void onAnimationStart(Animation animation) { 
         helloButton.setVisibility(View.VISIBLE); 
        } 
       }); 
       helloButton.startAnimation(fadeOutAnimation); 
       isVisible = false; 
       System.out.println("Button is visible... Time to Fade OUT"); 
      } 
     } 
    }); 

    } 
} 

私はこれがとてもシンプルな感じです。しかし、これは私がアンドロイド開発でアニメーションを遭遇したのは初めてです。どんな提案やアドバイスも大歓迎です!

答えて

1

変数isVisibleは必要ありません。ボタンが表示されているかどうかを確認してください。
fadeInAnimationを見るには、最初にVISIBLEビューを作成する必要があります。

はまた、私はこのコードをチェックし、両方のアニメーションの継続時間を変更:

helloButton = findViewById(R.id.helloButton); 
toggleButton = findViewById(R.id.toggleButton); 
toggleButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (helloButton.getVisibility() == View.GONE) { 
      AlphaAnimation fadeInAnimation = new AlphaAnimation(0, 1); 
      fadeInAnimation.setDuration(2500); 
      fadeInAnimation.setFillAfter(true); 
      fadeInAnimation.setAnimationListener(new Animation.AnimationListener() { 
       @Override 
       public void onAnimationEnd(Animation animation) { 
       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { } 

       @Override 
       public void onAnimationStart(Animation animation) { 
        helloButton.setVisibility(View.VISIBLE); 
       } 
      }); 
      helloButton.startAnimation(fadeInAnimation); 
     } else { 
      AlphaAnimation fadeOutAnimation = new AlphaAnimation(1, 0); 
      fadeOutAnimation.setDuration(2500); 
      fadeOutAnimation.setFillAfter(true); 
      fadeOutAnimation.setAnimationListener(new Animation.AnimationListener() { 
       @Override 
       public void onAnimationEnd(Animation animation) { 
        helloButton.setVisibility(View.GONE); 
       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { } 

       @Override 
       public void onAnimationStart(Animation animation) { 
       } 
      }); 
      helloButton.startAnimation(fadeOutAnimation); 
     } 
    } 
});