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

时间:2018-02-13 08:22:06

标签: java android draw android-custom-view clip

我有一个扩展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){...} 

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

我如何剪辑儿童不是自我观点?

1 个答案:

答案 0 :(得分:0)

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

 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;
}