比如, 現(xiàn)在有一個(gè)FrameLayout
, 里面包含了一個(gè)RecyclerView
, 需要設(shè)置外層的圓角為12. 可以有如下2種方式操作:
第一種, 通過代碼方式設(shè)置outline
裁剪
mFrameLayout.setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0,
0,
view.getWidth(),
view.getHeight(),
ConvertUtils.dp2px(12));
}
});
mFrameLayout.setClipToOutline(true);
第一個(gè)方法設(shè)置View的輪廓, 第二個(gè)方法開始輪廓裁剪. 這樣就可以只保留圓角矩形部分了.
效果圖如下:
使用到的布局代碼如下:
FrameLayout
和RecyclerView
<FrameLayout
android:id="@+id/frame"
android:layout_width="200dp"
android:layout_height="200dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
第二種, 通過shape
方式
這種方式更簡單,
- 直接設(shè)置一個(gè)帶圓角的shape
<FrameLayout
android:id="@+id/frame"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@drawable/shape_round_corner/>
<!-- 省略了ReyclerView部分代碼-->
</FrameLayout>
其中, drawable的shape部分代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="12dp" />
</shape>
- 開啟View的輪廓裁剪
mFrameLayout.setClipToOutline(true);
其他, 用到的RecyclerView
的Item代碼
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:padding="8dp"/>