Анимация перехода по клику (Показать снизу и идет вниз) - Android - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю над анимацией, когда пользователь нажимает на значок «Избранное», другой вид будет скользить вверх вниз, а затем скользить вниз (Показать и скрыть).

Проблема: я использую обработчик, который может вызвать утечку памяти, я ищу хороший подход. Если я не использую обработчик, он правильно перемещается вверх, но правильно скрывается, просто скрывается. Я использую это представление в адаптере для элементов.

XML:

Kotlin: ViewState.kt

class ViewState {
 @Bindable
    var addedToFavoritesVisibility: Int = View.GONE
        set(value) {
            field = value
            notifyPropertyChanged(BR.addedToFavoritesVisibility)
        }

fun favoriteClicked(button: Button, boolean: Boolean, visibility: Int = View.VISIBLE) {
        favorite = boolean
        val transitionListener = object : Transition.TransitionListener {
            override fun onTransitionEnd(transition: Transition) {
                transition.removeListener(this)
                android.os.Handler().postDelayed({ favoriteClicked(button, favorite, visibility = View.GONE) }, 1000)
            }

            override fun onTransitionResume(transition: Transition) {}
            override fun onTransitionPause(transition: Transition) {}
            override fun onTransitionCancel(transition: Transition) {}
            override fun onTransitionStart(transition: Transition) {}
        }
        val transition: Transition = Slide().apply {
            slideEdge = Gravity.BOTTOM
            duration = animationDuration
            addTarget(R.id.tv_added_to_favorites)
            if (visibility == View.VISIBLE) {
                addListener(transitionListener)
            }
        }

        TransitionManager.beginDelayedTransition(button.parent.parent as ViewGroup, transition)
        addedToFavoritesVisibility = visibility

    }
}

XML file:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout">

    <data>

        <import type="android.view.View" />
        <variable
            name="viewState"
            type="com.xyz.ViewState" />
    </data>

    <androidx.cardview.widget.CardView
        android:layout_width="280dp"
        android:layout_height="260dp"
        android:layout_marginTop="@dimen/spacing_2"
        android:layout_marginBottom="@dimen/spacing_2"
        app:cardCornerRadius="@dimen/spacing_8">
        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clickable="true"
            android:focusable="true">


                <ToggleButton
                    style="@style/ThriveMarket.Style.Favorite.Toggle.Large.Green"
                    android:layout_gravity="center"
                    android:checked="@{viewState.favorite}"
                    android:onCheckedChanged="@{(button, bool)-> viewState.favoriteClicked(button, bool, View.VISIBLE)}" />
            </FrameLayout>



                <TextView
                    android:id="@+id/tv_added_to_favorites"
background:"@color/black"
                    android:layout_width="match_parent"
                    android:layout_height="42dp"
                    android:background="@color/green"
                    android:gravity="center"
                    android:text="@string/tm_added_to_favorites"
                    android:visibility="@{viewState.addedToFavoritesVisibility}"
                    app:layout_constraintBottom_toBottomOf="parent"
                    tools:visibility="gone" />

            </androidx.constraintlayout.widget.ConstraintLayout>
        </androidx.cardview.widget.CardView>
    </layout>

Мне интересно, что если мне не хватает чего-то похожего на API-интерфейсы Animation, которые поддерживают показ / скрытие в одном переходе? Заранее спасибо.

...