Подтвердить что ты не робот

Округлые внутренние углы с прозрачной внутренней рамой

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

enter image description here

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

Пожалуйста, действуйте правильно.

4b9b3361

Ответ 1

Прежде всего, создайте 3 xml layout в выпадающей папке:

  • Сначала: frame.xml
  • Второе: frame_build.xml
  • В-третьих: red.xml

(Вы можете изменить это имя, как хотите),

frame.xml:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:bottom="20dp" android:drawable="@drawable/red" android:top="-25dp" />
    <item android:bottom="15dp" android:drawable="@drawable/frame_build" android:top="5dp" android:left="-5dp" android:right="-5dp" />
</layer-list>

frame_build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:radius="40dp" />
</shape>

red.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <stroke android:width="40dp" android:height="40dp" android:color="#B22222" />
    <padding android:left="8dp" android:top="-1dp" android:right="8dp" android:bottom="9dp" />
    <corners android:radius="-10dp" />
</shape>

Наконец, ссылайтесь на свой вид или макет на Frame XML следующим образом:

  android:background="@drawable/frame"

Это проверено и выводится как показано ниже:

Output image

Надеюсь на эту помощь.

Ответ 2

создайте следующий файл rounded_corner.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="-10dp"
        android:left="-10dp"
        android:right="-10dp"
        android:top="-10dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="10dp"
                android:color="#ffffff" />
            <corners android:radius="20dp" />
        </shape>
    </item>
</layer-list>

добавьте это под своим изображением, которое вы хотите применить к нему:

<View
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignBottom="@+id/my_image_view"
    android:layout_alignLeft="@id/my_image_view"
    android:layout_alignRight="@+id/my_image_view"
    android:layout_alignTop="@id/my_image_view"
    android:background="@drawable/rounded_corner" />

Ответ 3

настройка @Nima K, чтобы избежать использования дополнительного View

создать frame.xml @drawable

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:bottom="-10dp"
        android:left="-10dp"
        android:right="-10dp"
        android:top="-10dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="20dp"
                android:color="@color/frame_color" />
            <corners android:radius="30dp" />
        </shape>
    </item>

    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent" />

            <stroke
                android:width="20dp"
                android:color="@color/frame_color" />

            <corners android:radius="40dp" />
        </shape>

    </item>

</layer-list>

Затем используйте его с атрибутом "android: background" вашего представления

<TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/frame" />

И это результат

enter image description here