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) –