Как запустить анимацию при клике на кнопку во ViewPager и изменить значения полей

Я делаю приложение для запоминания английских слов. У меня есть БД с карточками, ViewModel, и фрагмент с адаптером для ViewPager2. Фрагмент наблюдает за списком карточек и передаёт его в адаптер. Также в адаптер я передаю обработчики для нажатия на кнопки. Как при нажатии на кнопку я могу запустить анимацию(поворот карточки) и изменить значения(engWord, rusWord) полей, или что можно для этого использовать? Я пытаюсь это сделать при помощи BindingAdapters, но пока не понимаю как это реализовать. Подскажите, как лучше сделать, может кто сталкивался с подобным? Это моя карточка в бд

@Entity(tableName = "word_table")
data class Card (
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0L,

    @ColumnInfo(name = "english_word")
    val engWord: String,

    @ColumnInfo(name = "russian_word")
    val rusWord: String,

//    @ColumnInfo(name = "id_audio_file")
//    val playSound: Int,
    @DrawableRes
    @ColumnInfo(name = "id_image_file")
    val img: Int,

    @ColumnInfo(name = "date_learned_word")
    val date: String?,

    @ColumnInfo(name = "is_idiom")
    val isIdiom: Boolean,

    @ColumnInfo(name = "category")
    val category: String?,

    @ColumnInfo(name = "mark")
    var mark: Boolean = false

)

Здесь я передаю обработчики в адаптер

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        viewPager = binding.viewPager
        positionDataStore = SettingsDataStore(requireContext().dataStore)
        val adapter = SliderAdapter(
            FlipButtonListener { card -> Toast.makeText(context, "${card.id} is flipped", Toast.LENGTH_SHORT).show() },
            StarButtonListener { card -> sliderViewModel.updateCard(card.copy().apply { mark = !mark }) }

        )
        viewPager.adapter = adapter

Это мой адаптер

class SliderAdapter(
    private val flipClickListener: FlipButtonListener,
    private val starClickListener: StarButtonListener )
    : ListAdapter<Card, RecyclerView.ViewHolder>(SliderDiffCallBack) {


    companion object SliderDiffCallBack : DiffUtil.ItemCallback<Card>() {
        override fun areItemsTheSame(oldItem: Card, newItem: Card): Boolean {
            return oldItem.id == newItem.id
        }
        
        override fun areContentsTheSame(oldItem: Card, newItem: Card): Boolean {
            Timber.i("cardId: ${oldItem.id} oldItemMark: ${oldItem.mark} newItemMark: ${newItem.mark}")
            return oldItem == newItem
        }
    }
    
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int)
            : RecyclerView.ViewHolder {
        return CardViewHolder.create(parent)
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val card = getItem(position)
        (holder as CardViewHolder).bind(card, starClickListener, flipClickListener)

    }

    class CardViewHolder private constructor(private val binding: SliderCardItemBinding)
        : RecyclerView.ViewHolder(binding.root) {
        fun bind(item: Card, starClickListener: StarButtonListener, flipClickListener: FlipButtonListener) {
            item.apply {
                binding.card = item
                binding.flipClickListener = flipClickListener
                binding.starClickListener = starClickListener
                Timber.i("BIND[${item.id}]: ${item.mark}")
                binding.executePendingBindings()
            }
        }
        
        companion object {
            fun create(parent: ViewGroup): CardViewHolder {
                val layoutInflater = LayoutInflater.from(parent.context)
                val binding = SliderCardItemBinding.inflate(layoutInflater, parent, false)

                return CardViewHolder(binding)
            }
            // Только что добавленные карточки
            private val justAddedCard: MutableList<Card> = mutableListOf()
        }
    }

}

class StarButtonListener(val starClickListener: (card: Card) -> Unit) {
    fun onStarClick(card: Card) = starClickListener(card)
}

class FlipButtonListener(val flipCardListener: (card: Card) -> Unit) {
    fun onFlipButtonClick(card: Card) = flipCardListener(card)
}

а это макет

<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">
    <data>
        <variable name="card" type="com.example.emi.database.Card"/>
        <variable name="starClickListener" type="com.example.emi.ui.slider.StarButtonListener"/>
        <variable name="flipClickListener" type="com.example.emi.ui.slider.FlipButtonListener"/>
    </data>
    <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">


        <androidx.cardview.widget.CardView
                android:id="@+id/flippedCard"
                android:layout_width="0dp" android:layout_height="0dp"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                android:layout_marginStart="8dp"
                android:layout_marginBottom="8dp"
                app:cardCornerRadius="24dp"
                android:layout_marginEnd="8dp"
                style='style="?attr/materialCardViewOutlinedStyle"'
                android:layout_marginTop="8dp">
            <androidx.constraintlayout.widget.ConstraintLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                <TextView
                        android:id="@+id/eng_word"
                        android:text="eng_word"
                        app:cardText="@{card}"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="24sp"
                        app:layout_constraintTop_toBottomOf="@+id/cardView"
                        app:layout_constraintStart_toStartOf="parent"
                        android:layout_marginTop="8dp"
                        app:layout_constraintEnd_toEndOf="parent"
                        android:fontFamily="@font/oswald"
                        android:textColor="@color/primaryColor"/>


                <androidx.cardview.widget.CardView
                        android:layout_width="0dp" android:layout_height="0dp"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintHeight_percent="0.7"
                        app:cardCornerRadius="24dp"
                        android:id="@+id/cardView"
                >

                    <ImageView
                            android:id="@+id/image_word"
                            app:cardImage="@{card}"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            app:srcCompat="@drawable/lemon"
                            android:adjustViewBounds="false"
                            android:scaleType="centerCrop"/>
                </androidx.cardview.widget.CardView>
                <ImageButton
                        android:id="@+id/btn_star"
                        android:layout_width="50dp"
                        app:cardMark="@{card}"
                        app:srcCompat="@drawable/star"
                        android:onClick="@{() -> starClickListener.onStarClick(card)}"
                        android:layout_height="50dp"
                        android:background="#00FFFFFF"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toStartOf="@+id/flip_card"
                        app:layout_constraintHorizontal_chainStyle="spread_inside" android:layout_marginStart="8dp"
                        app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="8dp"/>
                <ImageButton
                        android:id="@+id/flip_card"
                        android:onClick="@{() -> flipClickListener.onFlipButtonClick(card)}"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        app:srcCompat="@drawable/rotate_1"
                        android:background="#02FFFFFF"
                        app:layout_constraintStart_toEndOf="@+id/btn_star"
                        app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintTop_toTopOf="@+id/btn_star"
                        app:layout_constraintBottom_toBottomOf="@+id/btn_star" android:layout_marginEnd="8dp"/>
                <TextView
                        android:id="@+id/card_id"
                        android:text="TextView"
                        app:cardId="@{card}"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/eng_word"
                        android:layout_marginTop="16dp"/>

            </androidx.constraintlayout.widget.ConstraintLayout>

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

при нажатии на flip_card <ImageButton android:id="@+id/flip_card" я хочу повернуть <androidx.cardview.widget.CardView android:id="@+id/flippedCard" и изменить значение в поле <TextView android:id="@+id/eng_word" android:text="eng_word"


Ответы (0 шт):