Android: как обрезать только верхние закругленные углы - PullRequest
2 голосов
/ 02 мая 2019

Я создаю ScrollView с FrameLayout внутри.Я хочу сделать так, чтобы в 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 в конечном итоге выступаютчерез контур моего прокрутки

Извините за чертеж, но чего я добиваюсь

Однако, если я вместо этого создам форму, подобную

<shape>
    <solid android:color="@color/white"/>
    <corners
        android:radius="16dp"/>
    <padding android:padding="0dp"/>
</shape> 

Он отлично обрезает его.

Так как бы я обрезал его, если бы я только хотел, чтобы верх был загнан в угол.

1 Ответ

0 голосов
/ 02 мая 2019

Мне удалось заставить это работать, создав собственный 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);
...