1

我现在正在使用 Android App 上的一些自定义视图,现在我面临着我不知道如何解决的问题。我使用背景可绘制对象和可绘制对象的填充(不是视图)绘制视图边框。例如,典型的 FrameLayout 如下所示:

在此处输入图像描述

但是我的问题始于 ViewGroups 中的孩子应该被剪裁为蓝色区域,但它们是这样绘制的:

在此处输入图像描述

我的观点是实现绿色区域(任何类型的孩子)将被剪裁到蓝色区域的情况,也包括半径等。

我尝试了 clipToPadding() 和 Canvas.clipPath() 但最终一无所获。

有没有人有类似的情况,可以帮忙吗?

4

1 回答 1

0

好的,我找到了简单的解决方案,我改变了我的 onDraw 方法,类似:

 @Override
protected void onDraw(Canvas canvas) {

    getBackground().draw(canvas);
    mPath.reset();
    getDrawingRect(tmpRect);

    if (mRoundRect.left != tmpRect.left || mRoundRect.right != tmpRect.right ||
            mRoundRect.top != tmpRect.top || mRoundRect.bottom != tmpRect.bottom) {
        mRoundRect.set(tmpRect.left+border, tmpRect.top+border, tmpRect.right-border, tmpRect.bottom-border);
        mPath.addRoundRect(mRoundRect, floatsRadiuses, Path.Direction.CW);
        canvas.clipPath(mPath);
    }

    int childrenSize = getChildCount();
    for(int i=0;i<childrenSize;i++){
        View child = getChildAt(i);
        drawChild(canvas,child,getDrawingTime());
    }


}
于 2013-08-21T07:00:25.860 回答