web-dev-qa-db-ja.com

Android:ビューのフェードインとフェードアウト

フェードインおよびフェードアウト(およびインおよびアウトなど)する画像ボタンを表示する必要があります。透明度はsetAlphaで設定できますが、どのようにフェードインおよびフェードアウトできますか? UIスレッドでそのようなことをする必要があるので、別のスレッドではできません。

アニメーションでもできると思いますが、何も見つかりませんでした。アニメーションの経験がなく、何を検索するのか本当にわからないからです...

実際に私が本当に欲しいのは、ある画像をフェードインし、別の画像をフェードアウトすることですが、一番簡単な方法は、最初の画像ボタンを2番目の下に配置し、2番目の画像ボタンをフェードインすることです。またはそれを行う簡単な方法はありますか?

41
DominicM

ここで私が現在使用しているソリューションは、12より低いAPIレベルで動作します。

AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f);
anim.setDuration(1000);
anim.setRepeatCount(NUM_REPEATS);
anim.setRepeatMode(Animation.REVERSE);
button.startAnimation(anim);
75
DominicM

これは、プロジェクトで使用したアニメーションです。スピナーはビューなので、イメージビューでこれを変更できます。したがって、実際には2つの画像が互いの上に表示され、1つは表示され、もう1つは表示されません。これが私たちのやり方です。それが役に立てば幸い。

    spinner.setVisibility(View.VISIBLE);
    spinner.setAlpha(0);

    spinner.animate().setDuration(200).alpha(1).setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            spinner.setVisibility(View.VISIBLE);
        }
    });

     infoActivityContent.animate().setDuration(200).alpha(0).setListener(new AnimatorListenerAdapter() {
       @Override
       public void onAnimationEnd(Animator animation) {
            infoActivityContent.setVisibility(View.GONE);

       mainPresenter.logout();
       }
     });
22
David Maes

Crossfading Two Views from Android developers。このチュートリアルでは、必要なことを行う方法について説明します。

6
Mario Kutlev

コトリンで:

view.animate().alpha(1f).setDuration(1000)
            .setInterpolator(AccelerateInterpolator()).start()

AnimatorListenerAdaptersetListenerを追加して、他のビューステートを処理できます。

2
Abhilash Das

最初の画像の複数の連続したフレームを2番目の画像にモーフィングし、それを元に戻し、animation-listそしてonCreateでアニメーションを開始します

button_frames.xml:

   <?xml version="1.0" encoding="utf-8"?>
      <animation-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
        <item Android:drawable="@drawable/frame1" Android:duration="100" />
        <item Android:drawable="@drawable/frame2" Android:duration="100" />
                   ....

レイアウト:

  <ImageView Android:id="@+id/button" 
       Android:background="@drawable/button_frames"/>

OnCreate:

   ImageView button= (ImageView)findViewById(R.id.button);
   mAnimation = (AnimationDrawable) animationView.getBackground();
   button.postDelayed(new Runnable() {
       public void run() {
         mAnimation.start();
       }
   }, 100);
0
msh