Различные значения углового радиуса для MaterialCardView - PullRequest
0 голосов
/ 14 февраля 2019

Возможно ли иметь разные значения для каждого углового радиуса MaterialCardView?И если так, как?

Я пробовал что-то вроде приведенного ниже кода, но, похоже, он не имеет никакого эффекта

    float radius = getContext().getResources().getDimension(R.dimen.default_corner_radius);
    ShapePathModel leftShapePathModel = new ShapePathModel();
    leftShapePathModel.setTopLeftCorner(new RoundedCornerTreatment(radius));
    leftShapePathModel.setTopRightCorner(new RoundedCornerTreatment(radius));
    MaterialShapeDrawable bg = new MaterialShapeDrawable(leftShapePathModel);
    container.setBackground(bg);

, где контейнер

@BindView(R.id.container) MaterialCardView container;

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Мое первоначальное решение было правильным, но в нем отсутствовала одна строка:

float radius = getContext().getResources().getDimension(R.dimen.default_corner_radius);
ShapePathModel leftShapePathModel = new ShapePathModel();
leftShapePathModel.setTopLeftCorner(new RoundedCornerTreatment(radius));
leftShapePathModel.setTopRightCorner(new RoundedCornerTreatment(radius));
MaterialShapeDrawable bg = new MaterialShapeDrawable(leftShapePathModel);
container.setBackground(bg);

Если вы добавите

container.invalidate()

, как предложено Кэмероном выше, похоже, это сработает.

0 голосов
/ 14 февраля 2019

Я думаю, что вы должны быть в состоянии позвонить ShapeAppearanceModel shape = ((MaterialShapeDrawable)container.getBackground()).getShapeAppearanceModel() на ваш MaterialCardView.Оттуда вы можете вызвать setTopLeftCorner() или другие методы для установки угловых обработок с другими значениями.Возможно, вам придется позвонить container.invalidate() после того, как вы установите углы.

...