Кнопка расширения анимации появляется под другими элементами - PullRequest
0 голосов
/ 30 июня 2019

Итак, у меня есть пользовательская клавиатура, и у меня есть анимация расширения для каждой из кнопок на ней, но когда нажата кнопка, некоторая анимация расширения кнопки происходит ниже других кнопок: enter image description here

Вот так выглядит моя кнопка.

        <Button
            android:text="т"
            android:layout_width="0dp"
            android:background="@drawable/cell_keyboard"
            android:textColor="@color/keyboard_text_color"
            android:layout_height="@dimen/keyboard_button_height"
            android:onClick="@{(v)-> onClickListener.onKeyboardInput(v)}"
            android:stateListAnimator="@animator/button_large_expand_animation"
            android:id="@+id/button7"
            app:layout_constraintStart_toEndOf="@+id/button4" app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintEnd_toStartOf="@+id/button12"
            app:layout_constraintTop_toTopOf="@+id/button13"
            app:layout_constraintBottom_toBottomOf="@+id/button13" android:textAlignment="center"/>

А это анимация:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_enabled="true"
    android:state_pressed="true">
    <set>
        <objectAnimator
            android:duration="100"
            android:propertyName="scaleX"
            android:valueTo="1.5"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="100"
            android:propertyName="scaleY"
            android:valueTo="1.5"
            android:valueType="floatType" />
    </set>
</item>
<!-- base state -->
<item android:state_enabled="true">
    <set>
        <objectAnimator
            android:duration="200"
            android:propertyName="scaleX"
            android:startDelay="100"
            android:valueTo="1"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="200"
            android:propertyName="scaleY"
            android:startDelay="100"
            android:valueTo="1"
            android:valueType="floatType" />
    </set>
</item>
<item>
    <set>
        <objectAnimator
            android:duration="0"
            android:propertyName="scaleX"
            android:valueTo="1"
            android:valueType="floatType" />
        <objectAnimator
            android:duration="0"
            android:propertyName="scaleY"
            android:valueTo="1"
            android:valueType="floatType" />
    </set>
</item>

Что я пробовал:

    button.rootView.bringToFront()
    button.rootView.requestFocusFromTouch()

Я понятия не имею, как это исправить, любая помощь будет оценена.

EDIT Хорошо, небольшое обновление я заменил button.rootView.bringToFront() с button.bringToFront(), и это работает, НО вывод на фронт происходит после того, как анимация происходит. Поэтому при первом нажатии кнопки анимация находится ниже других элементов, но при повторном нажатии она находится над элементами, поскольку я использую android:stateListAnimator="@animator/button_large_expand_animation" Ребята, у вас есть идея, как это сделать, не добавляя слушателя анимации ко всем кнопкам и не вызывая метода takeToFront () в onAnimationStart ().

1 Ответ

0 голосов
/ 02 июля 2019

Попробуйте добавить elevation objectAnimator к вашему stateListAnimator:

(пример значений для повышенного состояния; вам может потребоваться настроить значение valueTo)

<objectAnimator
    android:duration="200"
    android:propertyName="elevation"
    android:valueTo="6dp"
    android:valueType="floatType" />
...