2

changeText で TextView をアニメーション化しようとしていますが、常にアニメーションの一方向のみが表示され、フェードアウトのみが表示されます

私が試しているのは: beforChange = fadeOut と onChange または after fadein

私のアクティビティの onCreate メソッドのコードは次のとおりです。

    final Animation out = new AlphaAnimation(1.0f, 0.0f);
    out.setDuration(1000);

    final Animation in = new AlphaAnimation(0.0f, 1.0f);
    in.setDuration(1000);


    bidFirst.setAnimation(out);
    bidMiddle.setAnimation(out);
    bidLast.setAnimation(out);

    TextWatcher bidWatcher = new TextWatcher() {
      public void onTextChanged(CharSequence s, int start, int before, int count) {
        in.startNow();
        bidFirst.setAnimation(out);
        bidMiddle.setAnimation(out);
        bidLast.setAnimation(out);
      }

      public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        out.startNow();
        bidFirst.setAnimation(in);
        bidMiddle.setAnimation(in);
        bidLast.setAnimation(in);
      }

      public void afterTextChanged(Editable s) {
      }
    };
    bidFirst.addTextChangedListener(bidWatcher);
    bidMiddle.addTextChangedListener(bidWatcher);
    bidLast.addTextChangedListener(bidWatcher);

私のコードには何か問題があると思いますが、私はそれがうまくいくと信じています。

私が今持っているものは次のとおりです:すべてのsetTextで変更されたテキストはFadeOutのみですが、テキストが変更された後はFadeInではありません!?

4

2 に答える 2

6

TextSwitcherはまさにあなたが探しているものです。setInAnimation()とを使用するだけsetOutAnimationです。テキストを変更すると、アニメーションが自動的に実行されるよりもsetText()

于 2010-08-24T09:08:29.620 に答える
1

コードを見ると、フェードインではなく、変更後にフェードアウトするように TextView に指示しています。

また、テキストが変更される直前に beforeTextChanged が呼び出されるため、このコードがどれほど効果的かはわかりません。onTextChanged のコードによって即座に置き換えられるため、beforeTextChanged でアニメーションが発生するのに十分な時間はありません。

編集**以下のコメントに返信

したがって、テキストビューをフェードアウトしてから新しいコンテンツでフェードインするには、Textwatcher を使用するのではなく、プログラムでフェードアウト アニメーションを開始します。フェードアウト アニメーションにAnimationListenerを与え、animationEnd で、フェードイン アニメーションを開始する前に新しいテキストを設定できます。

于 2010-08-24T08:52:32.687 に答える