27

ピクチャーギャラリーアプリを作っています。現在、下部にテキストビューがあるイメージビューがあります。現在は半透明です。フェードインさせ、3秒待ってから、90%フェードアウトさせます。それに焦点を合わせるか、新しい写真をロードすると、サイクルが繰り返されます。私は十数ページを読み、いくつかのことを試みましたが、成功しませんでした。私が得るのはフェードインとインスタントフェードアウトだけです

4

5 に答える 5

60
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 ); 

これは、黒の背景と白のテキストカラーで機能します。

于 2012-07-15T17:52:43.717 に答える
10

ガイコットホールの答えのための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
    })
}
于 2019-06-16T23:52:33.457 に答える
9

これは、TextViewsでフェードイン/フェードアウトアニメーションをループするためにプロジェクトで使用したソリューションです。

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);
}

これがお役に立てば幸いです。

于 2017-05-26T09:41:11.483 に答える
4

追加のアニメーションオブジェクト(アルファを変更しない)を使用して、瞬間的なフェードアウトを防ぎ、フェードイン効果のanimationListenerを設定し、フェードインのアニメーション終了時に追加のアニメーションオブジェクトを開始してから開始できます。追加のアニメーションオブジェクトのアニメーション終了時にフェードアウトします。以下のリンクを試してください。役に立ちます。

テキストビューの自動フェード効果

于 2014-04-05T23:46:27.257 に答える
0

私は同様の問題(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がどこか別の場所で宣言されていて、アルファがゼロから始まる場合。

于 2020-03-24T06:51:25.703 に答える