我開發了一個基於ViewGroup
的控件,我的問題是我需要在動畫結束後保存項目的位置。我在我創建的AnimationListener
的動畫對象中調用了setFillAfter(true)
,在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中,您希望像這樣.. –
不是BOTTOM或TOP,而是在具體的X,Y座標中,這些座標由'view.lay out()'方法 – teoREtik