GradientDrawable.setCornerRadii 的剪辑不起作用
Posted
技术标签:
【中文标题】GradientDrawable.setCornerRadii 的剪辑不起作用【英文标题】:Clip For GradientDrawable.setCornerRadii not working 【发布时间】:2020-11-21 11:15:11 【问题描述】:我正在尝试创建一个具有自定义半径的视图,但在使用 GradientDrawable.setCornerRadii 时遇到了问题...如果我使用下面的代码,视图会剪辑其中的所有子视图
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()
【讨论】:
以上是关于GradientDrawable.setCornerRadii 的剪辑不起作用的主要内容,如果未能解决你的问题,请参考以下文章