2013-07-07 92 views
0

我有一個自定義視圖(ViewGroup),它將從width = 0dp到width = 300dp獲得動畫效果。 我想在孩子被繪製後操作畫布。爲了達到這個我重寫dispatchDraw(Canvas)。 但是,我希望孩子能夠在300dp的畫布上呈現 - 即使自定義視圖的尺寸較小。 將較大的畫布傳遞給dispatchDraw(Canvas)方法時,孩子不會調整其位置和大小。自定義視圖:告訴孩子父母有其他尺寸

我的問題,我該如何「僞造」我的視圖組的更大寬度,以便讓孩子在更大的表面上渲染?

問候, 羅伯特

回答

0

每次視圖(包括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

希望這有助於...

相關問題