Как сделать кнопки произвольной формы на Android?

Добрый день, делаю первые шаги на андроиде. 5e5cc107cda41314723116.png
Подскажите как проще создать кнопки не стандартной формы. На рисунке 5 кнопок. Есть ли возможность накладывать маску на прямоугольную кнопку? Либо направьте в ту сторону куда копать, спасибо большое.
  • Вопрос задан
  • 1375 просмотров
Решения вопроса 1
@YuryBorodkin
Android dev
Если ты хочешь иметь какие-то сегменты с разными обработчиками на клик, ну или на вид одна кнопка, а по факту там пять зон с разными обработчиками, это делается через viewgroup, т.е кнопки накладываются друга на друга или как-то еще сочетаются.
В твоем случаем можно сделать что-то вроде
код лэйаута, тебе нужно что в FrameLayout
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:layout_width="80dp"
        android:layout_height="80dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <Button
            android:id="@+id/top_left"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="top|start"
            android:background="@drawable/rect_black_stroke_40dp" />

        <Button
            android:id="@+id/top_right"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="top|end"
            android:background="@drawable/rect_black_stroke_40dp" />

        <Button
            android:id="@+id/bottom_left"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="bottom|start"
            android:background="@drawable/rect_black_stroke_40dp" />

        <Button
            android:id="@+id/bottom_right"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="bottom|end"
            android:background="@drawable/rect_black_stroke_40dp" />

        <Button
            android:id="@+id/center"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:background="@drawable/circle_black_stroke_40dp" />
    </FrameLayout>

</androidx.constraintlayout.widget.ConstraintLayout>


circle_black_stroke_40dp
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:width="40dp"
        android:height="40dp" />
    <stroke
        android:width="1dp"
        android:color="#000" />
</shape>

rect_black_stoke_40dp
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size
        android:width="40dp"
        android:height="40dp" />
    <stroke
        android:width="1dp"
        android:color="#000" />
</shape>

Потом ставишь обработчики на id частей кнопки и готово. Можно один на все части (ну или сразу на весь FrameLayout) тогда будет на тап по любой части одна реакции. Либо, на каждый сегмент свой обработчик.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы