【Android】View的裁剪显示
2020/02/07 来源:乐潮信息
Clipping 可以让我们改变一个视图的外形。要使用Clipping,首先需要使用ViewOutlineProvider来修改outline,然后再通过setOutlineProvider将outline作用给视图。
通过下面这个例子向大家介绍clipping的用法,将一个正方形的textview裁剪成一个圆角方形和一个圆。布局代码如下:
<TextView
android:id="@+id/tv_circle_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="center"
android:padding="20dp"
android:background="#ffffff"
android:text="裁剪一" />
<TextView
android:id="@+id/tv_circle_2"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:background="#ff0000"
android:elevation="1dp"
android:gravity="center"
android:text="裁剪二" />
<ImageView
android:id="@+id/tv_circle_3"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:elevation="1dp"
android:gravity="center"
android:src="@drawable/test" />
<ImageView
android:id="@+id/tv_circle_4"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
android:elevation="1dp"
android:gravity="center"
android:src="@drawable/test" />
程序代码如下所示:
//设置outline 裁剪
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void initCircle() {
//获取outline
ViewOutlineProvider viewOutlineProvider1 = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
//修改outline为特定形状,上下左右相当于padding
outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 40);
}
};
//获取outline
ViewOutlineProvider viewOutlineProvider2 = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
//修改outline为特定形状
outline.setOval(0, 0, view.getWidth(), view.getHeight());
}
};
//重新设置形状
tvCircle1.setOutlineProvider(viewOutlineProvider1);
tvCircle2.setOutlineProvider(viewOutlineProvider2);
tvCircle3.setOutlineProvider(viewOutlineProvider1);
tvCircle4.setOutlineProvider(viewOutlineProvider2);
//添加背景或者是Imageview的时候失效,添加如下设置
tvCircle1.setClipToOutline(true);
tvCircle2.setClipToOutline(true);
tvCircle3.setClipToOutline(true);
tvCircle4.setClipToOutline(true);
}
其中前两个是textview,在代码中为其设置ViewOutlineProvider ,ViewOutlineProvider 中只有一个方法getOutline,设置圆角矩形的时候用outline.setRoundRect,里面的参数是四周的距离,最后是圆角的半径。设置圆形的时候是outline.setOval。
同时,还可以设置imageview的显示形状。
注意,当设置背景色和图片无效的时候,添加setClipToOutline(true)。效果如下图:
乐潮信息www.leco-tec.com