【发布时间】:2013-12-05 20:22:40
【问题描述】:
我基于ViewGroup 开发了一个小部件,我的问题是我需要在动画结束后保存项目的位置。我在我创建的动画对象中调用了setFillAfter(true) AnimationListener 并在它的onAnimationEnd 方法中调用View.layout(l,t,r,b) 来设置动画后的位置,因为我希望动画下次从新项目的位置开始。但在这种情况下,看起来项目被布局了两次。如果我在动画结束时不使用View.layout(l,t,r,b),则下一个动画将从前一个位置开始。这是我的代码:
private void scrollUp() {
for(int i = 0; i < getChildCount(); i++) {
final View child = getChildAt(i);
final int index = i;
final int newleft = child.getLeft() + mOffsetBetweenItems;
final int newTop = child.getTop() - mOffsetBetweenItems;
TranslateAnimation scrollUp = new TranslateAnimation(0, mOffsetBetweenItems, 0, -mOffsetBetweenItems);
scrollUp.setDuration(1500);
scrollUp.setFillAfter(true);
scrollUp.setAnimationListener(
new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
child.layout(newleft, newTop, newleft + child.getMeasuredWidth(), newTop + child.getMeasuredHeight() );
}
}
);
child.startAnimation(scrollUp);
}
}
请给我一个建议,我应该如何根据动画的结束位置重置视图的位置?
【问题讨论】:
-
改变位置意味着你想把它设置在布局的底部或顶部,你想要这样..
-
不是 BOTTOM 或 TOP,而是由
view.layout()方法定义的具体 X、Y 坐标