我想動畫查看它被添加到父級後(正如DrawerLayout)。問題是視圖大小不一,動畫目標位置取決於該大小。簡化的示例代碼:動畫新創建的未知大小的視圖
AnimatingView extends View {
public int offsetX;
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int screenWidth = MeasureSpec.getSize(widthMeasureSpec);
final int screenHeight = MeasureSpec.getSize(heightMeasureSpec);
offsetX = calculateOffset(screenWidth);
...
}
}
代碼與此類似觸發動畫:
@Override
public void onClick(View v) {
AnimatingView animatingView = new AnimatingView(getContext());
parentLayout.addView(animatingView);
animatingView.animate().x(animatingView.offsetX).setDuration(500).start();
}
在這種情況下onMeasure()
animate()
後會發生,所以動畫失敗。做什麼取決於視圖測量的正確方法是什麼?
簡單的&愚蠢的方式會像animateOnceAfterMeasuring()
基於isInitialized
標誌,但我不認爲它是這樣做的正確方法。
你爲什麼不u使用'Android版:在你的父佈局XML –
放'animatingView.animate(animateLayoutChanges'屬性).x(animatingView.offsetX).setDuration(500).start();'parent line in parentLayout.post(new Runnable(){});' –
@sohanshetty在這種情況下,父ViewGroup會將孩子佈置在默認位置,而不是在小孩實際上應該停止它的動作的位置nt – Levinthann