0

Androidで複数のビューで1つのアニメーションを再生したい。これはコードの単純化された例です。このコードは正しく動作しません。すべての startAnimation() 呼び出しは、以前にアニメーション化されたすべてのビューに影響します

なぜうまくいかないのか、どうしたらうまくいくのか教えてください。

public SomeClass() {

private int currentViewID = 0; 
private View[] views = { view1, view2, view3, view4, view5 }
private Animation anim = AnimationUtils.loadAnimation(this.getContext(), android.R.anim.fade_out);

public SomeClass() {
    this.anim.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
            if (SomeClass.this.currentViewID != SomeClass.this.views.length) SomeClass.this.hideNextView();
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }

        @Override
        public void onAnimationStart(Animation animation) {

        }

    });
    this.hideNextView();
}

private void hideNextView() {
    this.views[this.currentViewID++].startAnimation(this.anim);
}

}

4

1 に答える 1

0

クラス内で多くのアニメーション (ビューごとに 1 つ) を処理したくない場合は、ローカルで行うことができます。

private int currentViewID = 0; 
private View[] views = { view1, view2, view3, view4, view5 }

public SomeClass() {
    this.hideNextView();
}

private void hideNextView() {
    final Animation anim = AnimationUtils.loadAnimation(this.getContext(), android.R.anim.fade_out);

    anim.setAnimationListener(new Animation.AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
            if (SomeClass.this.currentViewID != SomeClass.this.views.length) SomeClass.this.hideNextView();
        }

        @Override
        public void onAnimationRepeat(Animation animation) {}

        @Override
        public void onAnimationStart(Animation animation) {}

    });

    this.views[this.currentViewID++].startAnimation(anim);
}
于 2012-08-25T21:54:40.847 に答える