如何为儿童设置剪辑路径?

Posted

技术标签:

【中文标题】如何为儿童设置剪辑路径?【英文标题】:How set clip path for children only? 【发布时间】:2018-02-13 08:22:05 【问题描述】:

我有一个扩展RelativeLayout 的自定义视图。 这有很多孩子。 我只想要剪辑孩子,但我的代码也剪辑了我的自定义视图。

public class LoadingBox extends RelativeLayout


    @Override
    protected void dispatchDraw(Canvas canvas)
    
        save = canvas.save();
          canvas.getClipBounds(clipRect);
          clipRectF.set(clipRect.left, clipRect.top, clipRect.right, 
          clipRect.bottom);
          clipPath.addRoundRect(clipRectF, 40f, 40f, Path.Direction.CW);
        canvas.clipPath(clipPath);
        super.dispatchDraw(canvas);
        canvas.restoreToCount(save);
    

 

我测试过

@Override
protected void onDraw(Canvas canvas)... 

也是,但我再次接受这个结果。

我如何只剪辑孩子而不是自己的视图?

【问题讨论】:

请多说一些(先画图再保存= canvas.save();) 现在更糟了,可以写出你的想法 【参考方案1】:

我找到了答案。 我用下面的代码

 LayoutInflater layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 ViewGroup layout = (ViewGroup) layoutInflater.inflate(R.layout.loading_box, this);

这是错误的, 必须动态创建子视图并覆盖drawChild

@Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime)

    boolean result;
    canvas.save();
    clipPath.reset();
    canvas.getClipBounds(clipRect);
    clipRectF.set(clipRect.left, clipRect.top, clipRect.right, clipRect.bottom);
    clipPath.addRoundRect(clipRectF, radius-2, radius-2, Path.Direction.CW);
    canvas.clipPath(clipPath);
    result = super.drawChild(canvas, child, drawingTime);
    canvas.restore();
    return result;

【讨论】:

以上是关于如何为儿童设置剪辑路径?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何为uibezierpath中的填充设置动画?

如何为剪切路径设置动画

儿童手表不能下载如解决不能adb

如何对儿童可见度的变化做出反应?

儿童学编程

儿童学编程