变量在onAnimationEnd运行之前发生变化

时间:2015-07-20 18:15:37

标签: java android animation

我的问题很可能是因为设计不好,但无论如何:

我有一个ArrayList,它包含一堆ImageViews(地形块)。 然后,我迭代地以编程方式创建ImageViews,然后将他们的动画设置为一个名为moveLeft的动画,它使ImageView向左移动10秒钟。

动画结束后,我需要将ImageView的可见性设置为GONE,因为它将在屏幕外显示。 问题是我使用int count来保存ImageView的总数。

moveLeft.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                terrainArray.get(count - 1).setVisibility(View.GONE);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

我经常制作新的地形块,这意味着我的计数变量不断变化。

但是,onAnimationEnd不会以与动画开始时相同的count值运行。因此,它最终会将某些块的可见性设置为GONE

这是因为onAnimationEnd在创建块后10秒内实际运行,因为动画持续10秒。

因此,当我想设置其可见性时,我留下了错误的块编号,因为在动画运行时正在创建更多块。 (因此增加count的价值)

我可以通过某种方式在count方法上存储onAnimationStart的当前值 然后将相同的值传递给onAnimationEnd方法? (并使其适用于无数个地形块?此外,只有一个侦听器,多个块可能同时结束其动画。)

1 个答案:

答案 0 :(得分:0)

这很容易。如果您确定需要count处的onAnimationStart()的确切值,请在匿名类中创建变量。在onAnimationStart()中保存计数值并在onAnimationEnd()

中使用它

您可以复制以下代码段。

moveLeft.setAnimationListener(new Animation.AnimationListener() {

        private int mCount = 0;

        @Override
        public void onAnimationStart(Animation animation) {
            mCount = count;
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            terrainArray.get(mCount - 1).setVisibility(View.GONE);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });

希望这会有所帮助。但是,我担心可能存在更大的设计问题。小心老板:))