Клип для GradientDrawable.setCornerRadii не работает

Я пытаюсь создать представление с настраиваемым радиусом, но сталкиваюсь с проблемой при использовании GradientDrawable.setCornerRadii...
Line Если я использую код ниже, вид обрезает все дочерние представления внутри него

public void SetCornerRadius(View v,int Radius){
        GradientDrawable shape = new GradientDrawable();
        shape.setShape(GradientDrawable.RECTANGLE);
        shape.setCornerRadius((int)Px2Dp(Radius));
        v.setBackground(shape);
        v.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
        v.setClipToOutline(true);
    }

Но если я использую код ниже для другого радиуса угла, то отсечение не работает должным образом, поскольку дочерний вид выходит за пределы родительского.

public void SetDifferentCornerRadius(View v,int TopLeftRadius,int TopRightRadius,int BottomLeftRadius,int BottomRightRadius,String backgroundColor){
        GradientDrawable shape = new GradientDrawable();
        ViewGroup vg = (ViewGroup)v;
        shape.setShape(GradientDrawable.RECTANGLE);
        shape.setColor(Color.parseColor(backgroundColor));
        shape.setCornerRadii(new float[] { (int)Px2Dp(TopLeftRadius),(int)Px2Dp(TopLeftRadius),(int)Px2Dp(TopRightRadius),(int)Px2Dp(TopRightRadius),(int)Px2Dp(BottomRightRadius),(int)Px2Dp(BottomRightRadius),(int)Px2Dp(BottomLeftRadius),(int)Px2Dp(BottomLeftRadius)});
        v.setBackground(shape);
        v.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
        v.setClipToOutline(true);

    }

1 ответ

Я бы предположил, что это не работает, потому что setClipToOutlineработает только для фигур ниже.

В настоящее время отсечение поддерживают только контуры, которые могут быть представлены в виде прямоугольника, круга или круглого прямоугольника.

https://developer.android.com/reference/android/graphics/Outline#canClip()

Другие вопросы по тегам