我正在编写一个应用程序,我在RelativeLayout中有一些视图(在不同的位置,使用边距),我正在使用Honeycomb中的新动画API为它们制作动画。 动画正在重复,但他们需要在每次重复之间等待一段时间,所以我不能使用重复模式。
一切顺利,但有一部分当我想将它们移动到另一个地方并停止动画,但它拒绝停止。我正在移动他们并且他们没有出现,突然我看到他们经过,因为他们仍然是动画。 我尝试了任何可能的方法,请帮助我。
代码:
if(!mMoving){
mMoving = true;
for(int i = 0; i < mImagesList.size(); i++){
final LinearLayout f = mImagesList.get(i);
if(mMoving){
ObjectAnimator anim = ObjectAnimator.ofFloat(f, "x", Math.round(mScreenWidth * 1.4));
mAnimators.add(anim);
anim.setDuration(mRandom.nextInt(10000) + 8000);
anim.setStartDelay((mRandom.nextInt(4000) + 3000) * (i / ITEMS_PER_SCREEN));
anim.addListener(new AnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
if(mMoving){
mAnimators.remove(animation);
ImageView img = (ImageView)f.findViewById(R.id.stream_feed_item_pic);
int picWidth = img.getDrawable().getIntrinsicWidth();
Animator anim = ObjectAnimator.ofFloat(f, "x", -Math.round(picWidth * 1.4), Math.round(mScreenWidth * 1.2));
mAnimators.set(mAnimators.indexOf(animation), anim);
anim.setDuration(mRandom.nextInt(14000) + 8000);
anim.setStartDelay((mRandom.nextInt(6000) + 3000) * (mImagesList.size() / ITEMS_PER_SCREEN));
anim.addListener(this);
anim.start();
}
}
});
anim.start();
}
}
mMoving = true;
return true;
}
正如你所看到的那样,我正在创建一个具有监听器的Animator,并且在每个动画结束时,都会调用监听器并创建一个新动画并获得启动延迟。我将所有动画存储在一个列表中。
这是我(绝望)企图阻止他们:
if(mMoving){
mMoving = false;
for(Animator anim : mAnimators){
anim.setStartDelay(0);
anim.setDuration(0);
anim.start();
anim.cancel();
anim.removeAllListeners();
anim.setTarget(null);
}
mAnimators.clear();
}
这是我将它们移动到另一个布局的方式:
mContainer.removeAllViews();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(picWidth, picHeight);
params.leftMargin = 0;
params.topMargin = 0;
if(size == SMALL_SIZE){
if(mSmallCounter < mSmallIdList.length){
RelativeLayout frame = (RelativeLayout)findViewById(mSmallIdList[mSmallCounter++]);
frame.addView(f, params);
}
}
我非常绝望,我尝试了几百种方法!
注意:这是HONEYCOMB API我使用的是动画,而不是动画预备3.0版
答案 0 :(得分:1)
然而没有答案?可能为时已晚,但对于读者而言,这是解决方案:
anim.setRepeatCount(0);