我有自己的View子类做布局(我称之为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;
}
}
据我所知,应该在指定的剪裁画布中绘制内部视图。
为什么视图仍然是空的?
此外,我尝试扩展ViewGroup,因此我将自身作为参数传递给适配器,但默认的ViewGroup.LayoutParams没有左(或x)属性,我需要处理正确的视图转换。但是当对它进行子类化时,onDraw永远不会被调用,并且孩子们仍然不会出现。
答案 0 :(得分:0)
我不确定我是否理解这个问题。 但是如果你想在画布上绘制一个视图,你必须启用绘图缓存,从中获取位图并绘制它。
示例:
// you have to enable setDrawingCacheEnabled, or the getDrawingCache will return null
view.setDrawingCacheEnabled(true);
// we need to setup how big the view should be..which is exactly as big as the canvas
view.measure(MeasureSpec.makeMeasureSpec(canvas.getWidth(), MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(canvas.getHeight(), MeasureSpec.AT_MOST));
// assign the layout values to the textview
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
mBitmap = view.getDrawingCache();
canvas.drawBitmap(mBitmap, x, y, mPaint);
// disable drawing cache
view.setDrawingCacheEnabled(false);
在这种情况下,它只是在给定位置绘制的视图的位图。