Я разрабатываю виджет на основе ViewGroup
, и моя проблема в том, что мне нужно сохранять положение элементов после окончания анимации. Я вызвал setFillAfter (true)
в своем объекте анимации, который я создал AnimationListener
, и в его вызове метода onAnimationEnd
View.layout (l, t, r, б)
, чтобы установить позицию после анимации, потому что я хочу, чтобы в следующий раз анимация начиналась с позиции нового элемента. Но в этом случае похоже, что предметы раскладываются дважды. Если я не использую 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);
}
}
Пожалуйста, дайте мне совет, как мне сбросить позицию представления в соответствии с конечной позицией анимации?