每次視圖(包括ViewGroups)需要將自己繪製onMeasure方法被調用,以獲得其尺寸。在此之後,onLayout被調用以獲得將在哪裏繪製的位置。這在繪製方法中不會發生,因爲它們在onMeasure和onLayout之後調用,請參閱here。總結onMeasure計算尺寸,onLayout設置位置,最後onDraw進行渲染。所以你最好的選擇是使用onMeasure來設置你想要的尺寸。例如,這是一個onMeasure方法,它會告訴一個孩子認爲,它的尺寸應該是完全300×150像素:如果你想使用逢低相反,你必須將它們轉換看here像素
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSpec;
int heightSpec;
widthSpec = MeasureSpec.makeMeasureSpec(300, MeasureSpec.EXACTLY);
heightSpec = MeasureSpec.makeMeasureSpec(150, MeasureSpec.EXACTLY);
llTopBar.measure(widthSpec, heightSpec); //<-- llTopBar is the child...
super.onMeasure(widthMeasureSpec, heightMeasureSpec); //<--This is important
}
。
您可以測量尺寸大於可用空間的孩子,但由於剪裁或其他因素(如果您的ViewGroup位於另一個ViewGroup中),結果可能不是您所期望的。
我可以從你的問題中看到,你正在構建從左向右滑動的東西,也許滑動畫筆源代碼會有幫助,請看看here。
希望這有助於...