0

次のコードを使用して、アニメーションリスナーを使用して、アニメーション化されているテキストビューのコンテンツを変更しようとしました:

final String text = [...]; 
animationGoOut.setAnimationListener(new AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {}
    @Override
    public void onAnimationRepeat(Animation animation) {}
    @Override
    public void onAnimationEnd(Animation animation) {
        myTextView.setText(text);
        myTextView.startAnimation(animationGoIn);
    }
});
myTextView.startAnimation(animationGoOut);

animationGoOutオブジェクトを画面の外に移動し、そのアルファを 0 に減らし animationGoInます。オブジェクトを元の位置に移動し、そのアルファを 1 にします。TextView にテキストを表示してから、別のテキストを表示するようにします。

指示を外すと

myTextView.setText(text);

アニメーションが開始する前に textView を変更すると、アニメーションもうまく機能します。コードをリスナーに変更すると (コードが示すように)、アニメーションがまったく機能しません!

4

1 に答える 1

0

TextSwitcher オブジェクトを使用して問題を解決しました。

レイアウトには、TextSwitcher があります (TextView があるべき場所にあります)。次に、これは私のコードです:

TextSwitcher mTextSwitcher = null;

@Override
protected void onCreate(...) {
    mTextSwitcher = findViewById(R.id.textSwitcher);
    Animation animIn = ...;
    Animation animOut = ...;
    mTextSwitcher.setFactory(this);
    mTextSwitcher.setInAnimation(animIn);
    mTextSwitcher.setOutAnimation(animOut);
}

private void changeText(String nextText) {
    mTextSwitcher.setText(nextText);
}

@Override
public View makeView() {
    TextView t = new TextView(this);
    t.setGravity(Gravity.CENTER);
    t.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);  // the size of a LargeText text view
    return t;
}

mTextSwitcher.setText(String) を呼び出すたびに、アウト アニメーションが実行され、次に新しいテキストでイン アニメーションが実行されます。まさに私が欲しかったものです!

于 2013-05-25T08:56:40.023 に答える