我正在创建一个内部有 FrameLayout 的 ScrollView。我想设计它以便在 ScrollView 上只有顶角是圆的。我创建了一个可绘制的形状,如下所示
<shape>
<solid android:color="@color/white"/>
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="16dp"
android:topRightRadius="16dp"/>
<padding android:padding="0dp"/>
</shape>
然后我在 ScrollView 上设置了以下内容
scrollView.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
scrollView.setClipToOutline(true);
当我尝试滚动时,我的 FrameLayout 中的元素最终突出了我的 ScrollView 的轮廓
Excuse the drawing, but what i'm looking to achieve
但是如果我改为创建这样的形状
<shape>
<solid android:color="@color/white"/>
<corners
android:radius="16dp"/>
<padding android:padding="0dp"/>
</shape>
它剪辑得很好。
那么,如果我只想让顶部变角,我该如何剪辑它呢。
最佳答案
我已经设法通过创建自定义 ViewOutlineProvider 并使用它而不是背景值来实现此功能
ViewOutlineProvider mViewOutlineProvider = new ViewOutlineProvider() {
@Override
public void getOutline(final View view, final Outline outline) {
float cornerRadiusDP = 16f;
float cornerRadius = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, cornerRadiusDP, getResources().getDisplayMetrics());
outline.setRoundRect(0, 0, view.getWidth(), (int)(view.getHeight() + cornerRadius), cornerRadius);
}
};
scrollView.setOutlineProvider(mViewOutlineProvider);
scrollView.setClipToOutline(true);
关于Android:如何只剪辑顶部圆角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959103/