并不是真正的裁剪SurfaceView,而是用 FrameLayout 包裹 SurfaceView达到视觉裁剪。
举例:给外层 FrameLayout 设置圆角轮廓 + 开启轮廓裁剪,让 FrameLayout 把超出圆角的部分 "挡住",从而让矩形 SurfaceView 看起来是圆角的。
activity_main.xml
java
<FrameLayout
android:id="@+id/frame_layout"
android:layout_width="2560px"
android:layout_height="1168px">
<SurfaceView
android:id="@+id/surfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"/>
</FrameLayout>
MainActivity.java
java
mFrameLayout = findViewById(R.id.frame_layout);
mFrameLayout.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
// 定义圆角矩形轮廓
outline.setRoundRect(0, 10, view.getWidth(), view.getHeight()-10, 70);
}
});
mFrameLayout.setClipToOutline(true); // 开启轮廓裁剪
mFrameLayout.setClipChildren(true); // 裁剪所有子View
outline.setRoundRect( left, // 左边界 top, // 上边界 right, // 右边界 bottom, // 下边界 radius // 圆角半径 );