我的问题很可能是因为设计不好,但无论如何:
我有一个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
方法? (并使其适用于无数个地形块?此外,只有一个侦听器,多个块可能同时结束其动画。)
答案 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) {
}
});
希望这会有所帮助。但是,我担心可能存在更大的设计问题。小心老板:))