Я пытаюсь анимировать изменение цвета фона MaterialButton при его отключении / включении ..
Кнопка:
<com.google.android.material.button.MaterialButton
android:id="@+id/btnContinue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/space_medium"
android:enabled="false"
android:text="@string/welcome_screen_btn_continue"/>
С этим стилем темы:
<style name="CustomButton" parent="Widget.MaterialComponents.Button">
<item name="android:textColor">@color/colorTextPrimary</item>
<item name="android:backgroundTint">@color/button_background</item>
<item name="android:stateListAnimator">@animator/button_state_animator</item>
</style>
Я прикрепил этот стиль к своему стилю приложения следующим образом:
<item name="materialButtonStyle">@style/CustomButton</item>
Вот селектор backgroundTint:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:color="@color/colorAccent"/>
<item android:state_enabled="false" android:color="@color/colorDisabled"/>
</selector>
и аниматор, который просто делает кнопку больше и немного поднятой ...
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">
<set>
<objectAnimator
android:duration="200"
android:propertyName="translationZ"
android:valueTo="6dp"
android:valueType="floatType" />
<objectAnimator
android:duration="200"
android:propertyName="scaleX"
android:valueTo="1.1"
android:valueType="floatType" />
<objectAnimator
android:duration="200"
android:propertyName="scaleY"
android:valueTo="1.1"
android:valueType="floatType" />
</set>
</item>
<item>
<set>
<objectAnimator
android:duration="200"
android:propertyName="translationZ"
android:valueTo="0dp"
android:valueType="floatType" />
<objectAnimator
android:duration="200"
android:propertyName="scaleX"
android:valueTo="1"
android:valueType="floatType" />
<objectAnimator
android:duration="200"
android:propertyName="scaleY"
android:valueTo="1"
android:valueType="floatType" />
</set>
</item>
</selector>
Опять же, я пытаюсь оживить изменение цвета не программным способом. Однако, если вы, ребята, думаете, что лучше просто создать новый класс, который расширяет кнопку Материал и обрабатывает анимацию там. хорошо, я сделаю это: D Я все о лучших практиках