Android视图剪辑

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

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

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

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

谢谢!

7 Solutions collect form web for “Android视图剪辑”

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

  • 在.NET中本地存储数据的最佳方法(C#)
  • 更改导航抽屉中菜单项的文本颜色
  • 如何从XmlDocument中selectXML命名空间的XML节点?
  • 你可以指定一个date时间的XmlSerialization的格式?
  • 将XML转换为纯文本 - 我应该如何忽略/处理XSLT中的空白?
  • 如何使用SimpleXmlElement编写CDATA?
  • 有没有XSLT名称的元素?
  • 什么是XML名称空间?
  • 在单个节点上使用XPath将返回所有节点中的元素
  • 无法在Ubuntu 11.04中安装R软件包
  • 免费的XML格式化工具