フェードインおよびフェードアウト(およびインおよびアウトなど)する画像ボタンを表示する必要があります。透明度はsetAlphaで設定できますが、どのようにフェードインおよびフェードアウトできますか? UIスレッドでそのようなことをする必要があるので、別のスレッドではできません。
アニメーションでもできると思いますが、何も見つかりませんでした。アニメーションの経験がなく、何を検索するのか本当にわからないからです...
実際に私が本当に欲しいのは、ある画像をフェードインし、別の画像をフェードアウトすることですが、一番簡単な方法は、最初の画像ボタンを2番目の下に配置し、2番目の画像ボタンをフェードインすることです。またはそれを行う簡単な方法はありますか?
ここで私が現在使用しているソリューションは、12より低いAPIレベルで動作します。
AlphaAnimation anim = new AlphaAnimation(1.0f, 0.0f);
anim.setDuration(1000);
anim.setRepeatCount(NUM_REPEATS);
anim.setRepeatMode(Animation.REVERSE);
button.startAnimation(anim);
これは、プロジェクトで使用したアニメーションです。スピナーはビューなので、イメージビューでこれを変更できます。したがって、実際には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();
}
});
Crossfading Two Views from Android developers
。このチュートリアルでは、必要なことを行う方法について説明します。
コトリンで:
view.animate().alpha(1f).setDuration(1000)
.setInterpolator(AccelerateInterpolator()).start()
AnimatorListenerAdapter
にsetListener
を追加して、他のビューステートを処理できます。
最初の画像の複数の連続したフレームを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);