1

私は現在、Android アプリでいくつかのカスタム ビューを使用していますが、解決方法がわからないという問題に直面しています。バックグラウンド ドローアブルとドローアブル (ビューではない) のパディングを使用して、ビューの境界線を描画します。たとえば、典型的な FrameLayout は次のようになります。

ここに画像の説明を入力

しかし、私の問題は、ViewGroups の子が青い領域で切り取られる必要があるときに始まりますが、そのように描画されます。

ここに画像の説明を入力

私のポイントは、緑色の領域(あらゆる種類の子)が半径なども含めて青色の領域にクリップされる状況を達成することです.

私は clipToPadding() と Canvas.clipPath() を試しましたが、結局何もありませんでした。

誰もが同様の状況を抱えていて、助けることができますか?

4

1 に答える 1

0

OK、簡単な解決策を見つけました。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 に答える