在某些 child 视图前绘制
Draw in front of certain child views
我有一个包含 header 和一圈菜单项的 ViewGroup。基本上我有一个 closing/opening 动画,其中我的项目视图位于 header 视图后面。由于所有视图都有透明胶片,当项目视图位于 header 视图后面时,它们仍然可见并最终通过透明胶片出现在 header 视图后面。
我想做的是将项目视图与 hweader 视图相交,删除交集。我想出的是覆盖 dispatchDraw
并做类似 PorterDuff.Mode.CLEAR
的事情
但从某种意义上说,我只能一次对所有视图执行此操作。使用下面的代码,它将擦除在该特定区域的视图中绘制的所有内容,因此 header 也是如此。
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
//do stuff here
}
有什么方法可以重新绘制视图,甚至 select 我想删除哪些视图?
仅供将来参考,这就是我所做的。覆盖调度绘制,擦除给定区域并使用 child.draw(canvas)
再次绘制 child
@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();
}
我有一个包含 header 和一圈菜单项的 ViewGroup。基本上我有一个 closing/opening 动画,其中我的项目视图位于 header 视图后面。由于所有视图都有透明胶片,当项目视图位于 header 视图后面时,它们仍然可见并最终通过透明胶片出现在 header 视图后面。
我想做的是将项目视图与 hweader 视图相交,删除交集。我想出的是覆盖 dispatchDraw
并做类似 PorterDuff.Mode.CLEAR
但从某种意义上说,我只能一次对所有视图执行此操作。使用下面的代码,它将擦除在该特定区域的视图中绘制的所有内容,因此 header 也是如此。
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
//do stuff here
}
有什么方法可以重新绘制视图,甚至 select 我想删除哪些视图?
仅供将来参考,这就是我所做的。覆盖调度绘制,擦除给定区域并使用 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();
}