Android:如何只剪辑顶部圆角

标签 android clip

我正在创建一个内部有 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/

相关文章:

android - 在应用程序中打开 Assets 文件 pdf

r - 在 R 中与轮廓和多边形相交

java - Java 中的声音 : Is it okay to use the same AudioInputStream for several Clips?

android - OkHttp认证器

java - 在组件边界外绘图

javascript - Kineticjs 复杂图像裁剪

html - <div> 中的圆孔

android - SQLite 约束异常 : UNIQUE constraint failed

使用 Aeris Weather SDK 的 java.lang.ClassNotFoundException : com. hamweather.aeris.maps.R$layout

android - 编辑扩展列表中的文本