Android查看剪辑

有没有办法在android(Honeycomb)中定义ViewGroup的剪辑区域?例如,我有一个带有圆角的图像背景的ListView。当我滚动列表时,孩子们伸出背景的角落 - 我宁愿他们在圆角内剪辑。 左图是它目前正在做的,右边是我想要的。 我在看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);
}
...并创建一个像这样的自定义drawable,称为'rounded',替换为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()覆盖中指定的边界,并将根据您的“圆形”drawable添加背景。     
使用
overridden onDraw(Canvas canvas)
创建自定义布局 叫
canvas.clipRect(0, 0, mCanvasWidth, mCanvasHeight);
这将剪切所有超出布局边界的视图。 不要忘记在构造函数中调用
setWillNotDraw(false)
,这样你的onDraw就会执行     
确保
layout
的背景有圆角。 科特林
layout.outlineProvider = ViewOutlineProvider.BACKGROUND
layout.clipToOutline = true
Java的
layout.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
layout.setClipToOutline(true);
    
怎么样:如何将Android视图渲染为位图,然后剪切该位图。 或者,另一个想法,使用
FrameLayout
,将剪辑蒙版堆叠在ViewGroup的顶部。剪辑蒙版将具有透明的中间不透明边框。 在这两种情况下,我想处理用户输入会很棘手......     
Path p = new Path()

// define your clipping path...

canvas.clipPath(p);
    
如果您看一下WhatsUp,您会发现在联系人图片中有一个圆形边框呈圆角的图像。 为此,我将ImageView放在FrameLayout(FrameLayout,因为我在图片前面使用ProgressBar来通知加载[实际上不可见])具有圆形边框。图片具有方形形状,但要进行优化,您需要使用画布。 再看一下这个可以解决问题的链接;)     
可能是您可以使用Canvas.clipRegion方法来剪切视图的差异。     
给android:clipToPadding一试。它会解决你的问题。     

要回复问题请先登录注册