我有一个ViewGroup,它包含一个标题和一个菜单项圈。基本上我有一个关闭/打开动画,我的项目视图位于标题视图的后面。由于所有视图都具有透明度,当项目视图位于标题视图后面时,它们仍然可见,最终通过透明胶片显示在标题视图后面。
我想要做的是将项目视图与hweader视图相交,擦除交集。我想出的是覆盖dispatchDraw
并执行PorterDuff.Mode.CLEAR
但从某种意义上讲,我只能同时对所有观点这样做。使用下面的代码,它将删除在该特定区域中的视图中绘制的所有内容,因此也会删除标题。
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
//do stuff here
}
有什么方法可以再次绘制视图,甚至选择我想要删除的视图?
答案 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();
}