Я разрабатываю виджет на основе 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);
}
}
Пожалуйста, дайте мне совет, как мне сбросить позицию вида в соответствии с конечной позицией анимации?