当我按如下方式设置View的轮廓时,它可以正常工作:
view.setClipToOutline(true);
view.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 16);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,使用a Path没有效果.替换setRoundRect为:
Path path = new Path();
path.addRoundRect(
0, 0, view.getWidth(), view.getHeight(), 16, 16, Path.Direction.CW);
outline.setConvexPath(path);
Run Code Online (Sandbox Code Playgroud)
如何使视图剪辑到提供的路径?
似乎View只能剪裁为矩形,圆角矩形或椭圆形Outline.相反,View可以仅被限幅到Outline一个与一个具体定义setRect(),setRoundRect()或setOval()方法.即使它本身可能是上述形状之一,但是具有不起作用的Outline集合也是Path行不通的Path.
在我看来,这在几个地方有记载,但并不是特别好.
请注意,只有View的Outline从中返回true时才会遵循此标志
canClip().
目前,只有可以表示为矩形,圆形或圆形矩形支持剪辑的轮廓.
只有矩形,圆形和圆角矩形轮廓支持剪切,由
Outline.canClip()方法确定.
初看起来,这似乎与Outline自己的内部工作不一致,因为凸起Path实际上是在内部用于非圆形椭圆形.但是,简单地禁止所有外部定义的Paths,而不是花费必要的资源来确定任意Path是否有效是有意义的.
我知道它没有帮助裁剪,但仍然可以利用outline.setConvexPath(path);的优势。在高程阴影中,因为它可以很好地用作路径周围高程阴影的轮廓。
我附加了一张图片,以使其在以下位置更加清晰:
第一张图片:带有[带有阴影的图片]的ImageView
android:outlineProvider =“ bounds”
android:elevation =“ 4dp”
第二图像:CustomImageView与canvas.clipPath(getShapePath())中的onDraw()方法[我们将获得cliped图像,但仍阴影显示为矩形约束]
android:outlineProvider =“ bounds”
android:elevation =“ 4dp”
第三图像:CustomImageView与canvas.clipPath(getShapePath())中的onDraw()方法?轮廓.setConvexPath(getShapePath())在ViewOutlineProvider [我们将得到cliped图像和阴影将褐藻胶有cilped图片]
android:outlineProvider =“ bounds” //这将无效,因为它将被setConvexPath覆盖
android:elevation =“ 4dp”

| 归档时间: |
|
| 查看次数: |
1616 次 |
| 最近记录: |