绘制子视图

时间:2013-07-01 21:56:18

标签: android android-layout android-custom-view viewgroup

我有自己的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永远不会被调用,并且孩子们仍然不会出现。

1 个答案:

答案 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);

在这种情况下,它只是在给定位置绘制的视图的位图。