【问题标题】:Draw in front of certain child views在某些子视图前绘制
【发布时间】:2016-10-19 12:57:06
【问题描述】:

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

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

但从某种意义上说,我只能同时对所有视图执行此操作。使用下面的代码,它将擦除在该特定区域的视图中绘制的所有内容,以及标题。

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

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

【问题讨论】:

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


    【解决方案1】:

    仅供参考,这就是我所做的。覆盖调度绘制,擦除给定区域并使用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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2017-01-31
      • 2016-05-20
      • 2012-04-14
      相关资源
      最近更新 更多