Clipping(裁剪)

Clipping可以让我们改变一个视图的外形。要使用Clipping,首先需要使用ViewOutineProvider来修改outline,然后再通过setOutlineProvider将outline作用给视图。

利用裁剪来实现一个圆角矩形的TextView和一个圆形的ImageView。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<TextView
android:id="@+id/tv"
android:layout_width="96dp"
android:layout_height="96dp"
android:text="Hello World!"
android:background="@color/colorAccent"
/>

<ImageView
android:id="@+id/iv"
android:layout_width="96dp"
android:layout_height="96dp"
android:src="@drawable/touxiang"
/>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
final TextView tv = (TextView) findViewById(R.id.tv);

ViewOutlineProvider viewOutlineProvider1 = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0,0,view.getWidth(),view.getHeight(),30);
}
};


tv.setOutlineProvider(viewOutlineProvider1);
tv.setClipToOutline(true);

final ImageView imageView = (ImageView) findViewById(R.id.iv);

ViewOutlineProvider viewOutlineProvider2 = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0,0,view.getWidth(),view.getHeight());
}
};


imageView.setOutlineProvider(viewOutlineProvider2);
imageView.setClipToOutline(true);

效果图:

此处输入图片的描述

setClipToOutline方法可以在前设置也可以在后设置,如果设置为false则表示禁止裁剪,setOutlineProvider方法将无效。

注意:

  • ViewOutlineProvider是Android 5.x引入的新特性,用于实现View的阴影和轮廓,所以如果我们的应用有5.0以下的设备的话,对于利用ViewOutlineProvider实现的效果,需要进行版本的适配。
  • 如果我们的应用设置了android:hardwareAccelerated=”false”,以上方式将无效。

参考链接:

《Android群英传》

Android 5.0新特性学习–视图轮廓

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器