Есть ли способ изменить радиус определенного угла конструкции материала CardView - PullRequest
2 голосов
/ 01 июня 2019

Я использую дизайн материала в своем приложении для Android и обычно для изменения радиуса угла карты я использую app: cardCornerRadius , но это изменит все четыре угла карты. Я хочу изменить любой конкретный угол карты. Я не хочу использовать drawable только для изменения угла. Есть ли способ через XML или программно.

 <com.google.android.material.card.MaterialCardView
        style="@style/Widget.MaterialComponents.CardView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/colorWhite"
        app:cardCornerRadius="16dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginStart="16dp" android:layout_marginEnd="16dp">
    <androidx.constraintlayout.widget.ConstraintLayout
            android:visibility="visible"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

Ответы [ 2 ]

1 голос
/ 02 июня 2019

У меня есть решение , но для него требуется v21 Lollipop и выше . Вы можете сделать это программно следующим образом:

В вашем классе деятельности есть public static int radius = 20; а в твоих Oncreate();

CardView card = findViewById(R.id.my_card);


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   makeCustomOutline(card);
}

затем определите функцию следующим образом:

 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void makeCustomOutline(CardView card){

    card.setOutlineProvider(new ViewOutlineProvider() {
        @Override
        public void getOutline(View view, Outline outline) {

            outline.setRoundRect(0, 0, view.getWidth(),
                    (view.getHeight() + radius), (float)radius );
        }
    });
    card.setClipToOutline(true);

}

С помощью метода setRoundRect() вы можете контролировать, какой угол обзора карты получает радиус, а какой - нет. Приведенный выше код закругляет только верхние углы, а нижние углы не закругляются.

Ссылки:

Этот ответ был адаптирован из этой статьи

документы по методу setRoundRect ()

документы на ViewOutlineProvider

0 голосов
/ 01 июня 2019

Я не совсем уверен в том, что в картридже Material design есть такая функциональность или нет. Но я не думаю, что у карты по умолчанию такая функциональность, поэтому от имени этой карты вы можете использовать

Эта библиотека (нажмите здесь) .

Это только мое мнение, может быть, есть другое хорошее решение для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...