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一个尝试。 它会解决你的问题。