Радиус границы колонны Litho

В настоящее время расследуется Litho и я попытался добавить границу к Column. Кажется, все работает нормально, пока я не добавлю фон вColumn. ВColumn не кажется обрезанным по границам

Смотрите прикрепленное изображение для лучшего описания

Код (в Котлине)

companion object {

        @JvmStatic
        @OnCreateLayout
        fun onCreateLayout(context: ComponentContext): Component = Row.create(context)
            .alignItems(YogaAlign.CENTER)
            .justifyContent(YogaJustify.CENTER)
            .child(
                Column.create(context)
                    .border(
                        Border.create(context)
                            .color(YogaEdge.ALL, Color.RED)
                            .widthDip(YogaEdge.ALL, 2f)
                            .radiusDip(20f)
                            .build()
                    )
                    .shadowElevationDip(10f)
                    .backgroundColor(Color.BLUE)
                    .paddingDip(YogaEdge.ALL, 20f)
                    .child(
                        Text.create(context)
                            .text("Litho for Android")
                            .textSizeSp(20f)
                            .marginDip(YogaEdge.BOTTOM, 4f)
                    )
                    .child(
                        Text.create(context)
                            .text("20 Sections")
                            .textSizeSp(14f)
                    )
            )
            .build()
    }

ДОПОЛНИТЕЛЬНЫЙ НОМЕР: shadowElevation похоже, не работает, так как нет теней.

Пожалуйста, как я могу исправить проблемы с границами (и тенью)?

1 ответ

Фон и граница рисуются по-разному, поэтому, если вы хотите использовать их вместе, вам нужно будет создать фон с тем же радиусом, что и граница, которую вы устанавливаете, чтобы получить здесь тот же эффект. Чтобы создать фон с кодом здесь, вы можете использовать

GradientDrawable background = ComparableGradientDrawable.create();
background.setShape(GradientDrawable.RECTANGLE);
background.setCornerRadius(radius);
background.setColor(color);

И установите фон для свойства background для столбца. Если вы хотите сделать что-то подобное, я бы рекомендовал использовать фон с необходимой рамкой и цветным фоном. В этом примере просто установите Stroke на задний план.

Что касается теней, похоже, есть ошибка, когда провайдер схемы пытается определить тени на фоне, но не может ее найти. Я бы сказал, что для того, чтобы это работало до тех пор, пока не будет исправлено, просто переопределите поставщика схемы примерно так:

.outlineProvider(
    new ViewOutlineProvider() {
      @Override
      public void getOutline(View view, Outline outline) {
        outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radius);
      }
    })
Другие вопросы по тегам