Более простой способ добиться этого, чем создание подкласса, состоит в создании двух отдельных элементов рисования, а затем создании селектора, который назначается в качестве значка для меню для нижнего навигационного представления.
activity.xml:
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
app:itemIconTint="@drawable/sel_navigation"
app:itemTextColor="@drawable/sel_navigation_label"
app:menu="@menu/navigation" />
menu / navigation.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_history"
android:icon="@drawable/ic_history_selector"
android:title="@string/title_history" />
</menu>
drawable / ic_history_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_history_selected" android:state_pressed="true" />
<item android:drawable="@drawable/ic_history_selected" android:state_checked="true"/>
<item android:drawable="@drawable/ic_history"/>
</selector>
drawable / ic_history.xml:
<vector ...>
<path android:fillColor="@color/gradient_orange" .../>
</vector>
цвет / градиент_orange.xml:
<gradient xmlns:android="http://schemas.android.com/apk/res/android"
android:angle="0"
android:endColor="@color/orange"
android:startColor="@color/lightOrange"
android:startX="0"
android:endX="0"
android:startY="0"
android:endY="100"
android:type="linear" />
Наконец, в упражнении вам нужно установить нулевой список оттенков значка, чтобы он не использовал цвет оттенка значка из xml.Отлично работает с градиентами (API 24 +).
См .: https://stackoverflow.com/a/47203888