在某些儿童观点面前画画

时间:2016-10-19 12:57:06

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

我有一个ViewGroup,它包含一个标题和一个菜单项圈。基本上我有一个关闭/打开动画,我的项目视图位于标题视图的后面。由于所有视图都具有透明度,当项目视图位于标题视图后面时,它们仍然可见,最终通过透明胶片显示在标题视图后面。

我想要做的是将项目视图与hweader视图相交,擦除交集。我想出的是覆盖dispatchDraw并执行PorterDuff.Mode.CLEAR

之类的操作

但从某种意义上讲,我只能同时对所有观点这样做。使用下面的代码,它将删除在该特定区域中的视图中绘制的所有内容,因此也会删除标题。

@Override
protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);
    //do stuff here
}

有什么方法可以再次绘制视图,甚至选择我想要删除的视图?

1 个答案:

答案 0 :(得分:2)

仅供将来参考,这就是我所做的。覆盖调度绘制,删除给定区域并使用child.draw(canvas)

再次绘制子项
@Override
protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);
    Paint p = new Paint();
    p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    canvas.drawCircle((float) center.x, (float) center.y, headerSize / 2, p);
    canvas.save();
    canvas.translate(padding, padding);
    getChildAt(0).draw(canvas);
    canvas.restore();
}