Android视图剪辑

有没有什么办法可以在android(Honeycomb)中定义ViewGroup的剪辑区域? 例如,我有一个带有圆angular的图像背景的ListView。 当我滚动列表时,孩子们伸出背景的angular落 – 我更喜欢他们在圆angular内剪辑。 左:未剪裁,右:剪裁

左图是目前正在做的,右图是我想要的。

我在看ClipDrawable,但似乎这只能用于进度条?

另外,我正在试图在一个小部件中做到这一点。 所以我不能使用自定义视图并重写onDraw掩码。

谢谢!

尝试inheritanceViewGroup并重写OnDraw方法,如下所示,将值replace为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); } 

…并创build一个类似于“rounded”的自定义drawable,replaceYOUR_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()覆盖中指定的边界,并且会根据您的“舍入”绘制来添加背景。

overridden onDraw(Canvas canvas)创build自定义布局

调用canvas.clipRect(0, 0, mCanvasWidth, mCanvasHeight);

这将剪切掉布局边界外的所有视图。

别忘了在构造函数中调用setWillNotDraw(false) ,所以你的onDraw将会执行

怎么样: 如何渲染一个Android视图到位图 ,然后剪辑该位图。

或者,另一种想法是使用FrameLayout ,将您的剪辑遮罩堆叠在ViewGroup的顶部。 剪贴蒙版将有透明的中间,不透明的边界。

在这两种情况下,我想这将是棘手的处理用户input…

如果你看看WhatsUp,你可以看到在联系人图片中有一个圆形的边框图像。 为了做到这一点,我已经把ImageView放在一个FrameLayout(FrameLayout,因为我使用图片前面的ProgressBar来通知加载[实际上不可见]),具有四舍五入的边框。 图片有一个正方形的形状,但要细化它,你需要使用canvas。

再看看这个链接 ,将解决您的问题;)

也许你可以使用Canvas.clipRegion方法来截取视图的差异。

 Path p = new Path() // define your clipping path... canvas.clipPath(p); 

给android:clipToPadding一个尝试。 它会解决你的问题。