Материал Кнопка Анимация выбора цвета - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь анимировать изменение цвета фона 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 Я все о лучших практиках

...