1
我有我自己的視圖子類,佈局(我稱之爲ViewGallery),我的問題是,我手動繪製的視圖不會出現在屏幕上,這裏是onDraw方法。繪製子視圖
@Override
protected void onDraw(Canvas canvas) {
for(Child child : visibleChilds){
canvas.save();
canvas.clipRect(child.bounds);
child.view.draw(canvas);
canvas.restore();
}
}
private List<Child> visibleChilds = new ArrayList<ViewGallery.Child>();
private static class Child {
private View view;
private Rect bounds;
public Child(View view, Rect rect) {
this.view = view;
bounds = rect;
}
}
據我所知,應該在指定的剪切Canvas中繪製內部視圖。
爲什麼視圖仍然是空的?
此外,我試圖擴展ViewGroup,所以我將自己作爲參數傳遞給適配器,但默認ViewGroup.LayoutParams沒有留下(或x)屬性,我需要妥善處理視圖的轉換。但是,在繼承onDraw時,onDraw永遠不會被調用,孩子仍然不會出現。
您需要重寫dispatchDraw()來繪製子元素,而不是onDraw()。你可以從onDraw()做到,但你首先需要調用setWillNotDraw(false)。您還應該使用ViewGroup.drawChild()來正確繪製每個孩子。 –
有沒有dispatchDraw重寫在ViewGroup,我試圖使用setWillNotDraw方法。另外,我需要知道ViewGroup是否會處理addViews,還是我應該重寫它呢? –
是的,有一個dispatchDraw()方法:http://developer.android.com/reference/android/view/ViewGroup.html#dispatchDraw(android.graphics.Canvas) –