安卓视图剪辑
2022-08-31 14:37:49
有没有办法在android(Honeycomb)中定义ViewGroup的剪辑区域?例如,我有一个列表视图,其图像背景具有圆角。当我滚动列表时,孩子们会伸出背景的角落 - 我希望他们夹在圆角内。
左图是它目前正在做的事情,右边是我想要的。
我正在查看ClipDrawable,但似乎这可能仅用于进度条?
另外,我正在尝试在小部件中执行此操作。因此,我无法使用自定义视图并覆盖 onDraw 进行遮罩。
谢谢!
有没有办法在android(Honeycomb)中定义ViewGroup的剪辑区域?例如,我有一个列表视图,其图像背景具有圆角。当我滚动列表时,孩子们会伸出背景的角落 - 我希望他们夹在圆角内。
左图是它目前正在做的事情,右边是我想要的。
我正在查看ClipDrawable,但似乎这可能仅用于进度条?
另外,我正在尝试在小部件中执行此操作。因此,我无法使用自定义视图并覆盖 onDraw 进行遮罩。
谢谢!
尝试子类化 ViewGroup 并重写 OnDraw 方法,如下所示,用值替换RADIUS_IN_PIXELS:
@Override
protected void onDraw(Canvas canvas) {
Path clipPath = new Path();
clipPath.addRoundRect(new RectF(canvas.getClipBounds()), RADIUS_IN_PIXELS, RADIUS_IN_PIXELS, Path.Direction.CW);
canvas.clipPath(clipPath);
super.onDraw(canvas);
}
...并创建一个像这样的自定义可绘制对象,称为“舍入”,替换YOUR_BACKGROUND_COLOR和RADIUS_IN_DP,确保DP中矩形的舍入与PX中以前的剪切半径相匹配:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="RADIUS_IN_DP" />
<solid android:color="YOUR_BACKGROUND_COLOR"/>
</shape>
然后,您可以在布局中使用该子类,并添加行
android:background="@drawable/rounded"
android:clipChildren="true"
所有子项都将剪切到您在 OnDraw() 覆盖中指定的边界,并且将根据您的“圆角”可绘制对象添加背景。
确保背景有圆角。layout
科特林
layout.outlineProvider = ViewOutlineProvider.BACKGROUND
layout.clipToOutline = true
爪哇岛
layout.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
layout.setClipToOutline(true);