我正试图创建一个具有自定义半径的视图,但在使用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);
}
我想它不起作用,因为setClipToOutline
只适用于下面的形状。
目前,只有可以表示为矩形、圆形或圆形矩形的轮廓支持剪裁。
https://developer.android.com/reference/android/graphics/Outline#canClip((