Клип для 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()