画像ギャラリーアプリを作っています。現在、下部にテキストビューのあるimageviewがあります。現在は半透明です。フェードインさせ、3秒待ってから90%フェードアウトさせたい。それに焦点を合わせるか、新しい写真をロードすると、サイクルが繰り返されます。私は十数ページを読み、いくつかのことを試しましたが、成功しませんでした。私が得るすべてはフェードインと瞬時のフェードアウトです
追加のアニメーションオブジェクト(アルファを変更しない)を使用してインスタントフェードアウトを防止し、フェードインエフェクトのanimationListenerを設定して、フェードインのon animationEndで追加のアニメーションオブジェクトを開始してから、開始できます。追加のアニメーションオブジェクトのアニメーション終了時にフェードアウトします。以下のリンクをお試しください。
protected AlphaAnimation fadeIn = new AlphaAnimation(0.0f , 1.0f ) ;
protected AlphaAnimation fadeOut = new AlphaAnimation( 1.0f , 0.0f ) ;
txtView.startAnimation(fadeIn);
txtView.startAnimation(fadeOut);
fadeIn.setDuration(1200);
fadeIn.setFillAfter(true);
fadeOut.setDuration(1200);
fadeOut.setFillAfter(true);
fadeOut.setStartOffset(4200+fadeIn.getStartOffset());
白い背景に最適です。それ以外の場合は、AlphaAnimation
クラスをインスタンス化するときに値を切り替える必要があります。このような:
AlphaAnimation fadeIn = new AlphaAnimation( 1.0f , 0.0f );
AlphaAnimation fadeOut = new AlphaAnimation(0.0f , 1.0f );
これは黒の背景と白のテキストの色で動作します。
これが、私のプロジェクトでTextViewのフェードイン/フェードアウトアニメーションをループするために使用したソリューションです。
private void setUpFadeAnimation(final TextView textView) {
// Start from 0.1f if you desire 90% fade animation
final Animation fadeIn = new AlphaAnimation(0.0f, 1.0f);
fadeIn.setDuration(1000);
fadeIn.setStartOffset(3000);
// End to 0.1f if you desire 90% fade animation
final Animation fadeOut = new AlphaAnimation(1.0f, 0.0f);
fadeOut.setDuration(1000);
fadeOut.setStartOffset(3000);
fadeIn.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationEnd(Animation arg0) {
// start fadeOut when fadeIn ends (continue)
textView.startAnimation(fadeOut);
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
fadeOut.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationEnd(Animation arg0) {
// start fadeIn when fadeOut ends (repeat)
textView.startAnimation(fadeIn);
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
textView.startAnimation(fadeOut);
}
これが役立つことを願っています!
Guy Cothalの回答に対するKotlin拡張機能:
inline fun View.fadeIn(durationMillis: Long = 250) {
this.startAnimation(AlphaAnimation(0F, 1F).apply {
duration = durationMillis
fillAfter = true
})
}
inline fun View.fadeOut(durationMillis: Long = 250) {
this.startAnimation(AlphaAnimation(1F, 0F).apply {
duration = durationMillis
fillAfter = true
})
}
私は同様の問題(TextViewのフェードイン/待機/フェードアウト)の解決策を探していて、これを思いつきました(実際、公式のドキュメントもこれを指摘しています)。明らかにパラメーターを追加することでこれを改善できます。
public void showFadingText(String text){
txtView.setText(text);
Runnable endAction;
txtView.animate().alpha(1f).setDuration(1000).setStartDelay(0).withEndAction(
endAction = new Runnable() {
public void run() {
txtView.animate().alpha(0f).setDuration(1000).setStartDelay(2000);
}
}
);
}
TxtViewがどこか他のどこかでゼロから始まるアルファで宣言されている場合。