2

私はこのようなコードを持っています:

else if (v == mSettings)
{
    if (disappearView.getVisibility() == View.VISIBLE)
    {
        AlphaAnimation fadeOutAnimation = new AlphaAnimation(1, 0); // start alpha, end alpha
        fadeOutAnimation.setDuration(1000); // time for animation in milliseconds
        fadeOutAnimation.setFillAfter(true); // make the transformation persist
        Animation out = AnimationUtils.makeOutAnimation(this, true);
        disappearView.startAnimation(out);
        disappearView.setVisibility(View.INVISIBLE);
        out.setAnimationListener(new Animation.AnimationListener()
        {
            public void onAnimationEnd(Animation animation)
            {
                disappearView.setVisibility(View.GONE);
                Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
                bannerView.startAnimation(in);
                bannerView.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationRepeat(Animation animation) { }

            @Override
            public void onAnimationStart(Animation animation) { }
        });
    }
    else {
        Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
        disappearView.startAnimation(in);
        disappearView.setVisibility(View.VISIBLE);
        bannerView.setVisibility(View.INVISIBLE);
        bannerView.setVisibility(View.GONE);
    }
}

これはすべて、animationListenerのこのセクションとは別に機能します。

Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);

有効なコンテキストが必要ですが、animationListenerを受信して​​います。どのコンテキストを指定すればよいですか、コンテキストはここで本当に混乱します。

4

2 に答える 2

7

次のように変更します。

Animation in = AnimationUtils.loadAnimation(MyActivityName.this, android.R.anim.fade_in);

Contextを拡張する任意のクラスのインスタンスが必要です。匿名の内部クラス内にあるため、使用thisすると、Activity ではなく、内部クラスのインスタンスが参照されます。私のスニペットは、匿名の内部クラスをラップする Activity クラスを参照しています。Activityは Context を拡張するため、これは有効な引数です。

于 2013-03-05T14:38:31.660 に答える
4

リスナー内でthisは、 を参照していListenerます。使ってみてActivityName.this

于 2013-03-05T14:39:02.890 に答える