Как сохранить тень/высоту большого пальца Switch при использовании пользовательского рисунка для большого пальца?

Мне нужно заменить большой палец Switch по умолчанию моим собственным рисунком. Для этого я использовал атрибут android:thumb, он работает хорошо, но тени под большим пальцем больше нет. Как я могу использовать свой собственный большой палец, сохраняя при этом тень / высоту большого пальца?

Вот стиль, который я реализовал:

<style name="TiimeGreenSwitch" parent="Widget.AppCompat.CompoundButton.Switch">
    <item name="android:thumb">@drawable/switch_green_thumb</item>
    <item name="trackTint">@color/switch_green_track</item>
</style>

Drawable - это этот селектор:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/switch_green_thumb_disabled" android:state_enabled="false" />
    <item android:drawable="@drawable/switch_green_thumb_checked" android:state_checked="true" />
    <item android:drawable="@drawable/switch_green_thumb_default" />
</selector>

И каждый рисунок выглядит следующим образом:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size android:width="20dp" android:height="20dp" />
    <solid android:color="#ffffff" />
    <stroke android:width="1dp" android:color="@color/switch_checked" />
</shape>

Редактировать: после ответа Гейба Сечана я реализовал тень непосредственно в чертеже, как показано ниже, она работает так, как ожидалось:

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

    <item>
        <shape android:shape="oval">
            <size
                android:width="22dp"
                android:height="22dp" />
            <solid android:color="#22000000" />
        </shape>
    </item>

    <item
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp">
        <shape android:shape="oval">
            <size
                android:width="20dp"
                android:height="20dp" />
            <solid android:color="#ffffff" />
            <stroke
                android:width="1dp"
                android:color="@color/switch_checked" />
        </shape>
    </item>

</layer-list>

person MickaelG    schedule 25.04.2019    source источник


Ответы (1)


Поместите тень в drawable. Вот как это работает в рисовании по умолчанию, поэтому вы его сейчас потеряли. Это действительно единственный способ сделать это, так как ОС не знает форму, которую вы на самом деле используете, и в лучшем случае может поместить тень под весь рисуемый объект, что было бы неправильно, если бы вы использовали круг или закругленные края.

person Gabe Sechan    schedule 25.04.2019
comment
Работает отлично, спасибо! Я отредактировал свой вопрос с реализацией вашего ответа. - person MickaelG; 25.04.2019