Дата скользит вверх и скользит вниз анимация при прокрутке пользователем в разговоре android kotlin

#android #kotlin #android-layout #android-recyclerview #android-animation

Вопрос:

Эй, я работаю над разговором в чате. Я хочу показывать анимацию текстового представления даты, когда пользователь прокручивает в reyclerview, как в WhatsApp. Я думаю, что анимация скользит вверх и скользит вниз. Но я не на 100% уверен, что это за анимация. Также я попробовал какой-то код, но он не выглядит правильным. Кто — то знает, как исправить, когда показывать текстовое представление даты при прокрутке пользователем.

activity.xml

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/slight_white">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@ id/reyclerview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <LinearLayout
        android:id="@ id/headerContainer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/pale"
        android:visibility="invisible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:id="@ id/headerDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            tools:text="HHHHH" />

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
 

Активность.тыс. т

 class Activity : BaseActivity() {

    lateinit var binding: ActivityLayoutBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityLayoutBinding.inflate(layoutInflater)
        setContentView(binding.root)
        setupView()
    }

    private fun setupAdapter(conversationList: MutableList<Conversation>?) {
        val adapter = conversationAdapter()
        binding.reyclerview.apply {
            this.adapter = adapter
            layoutManager = LinearLayoutManager(this.context).apply {
                stackFromEnd = false
                reverseLayout = true
            }
            addOnScrollListener(object : RecyclerView.OnScrollListener() {
                override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                    super.onScrolled(recyclerView, dx, dy)
                    val position: Int = getLastItemPosition(recyclerView)
                    slideDownAnimation()
                    binding.headerDate.visibility = View.VISIBLE
                    binding.headerContainer.visibility = View.VISIBLE
                    binding.headerDate.text = conversationList[position].date

                    Looper.myLooper()?.let {
                        Handler(it).postDelayed({
                            slideUpAnimation()
                            binding.headerDate.visibility = View.INVISIBLE
                            binding.headerContainer.visibility = View.INVISIBLE
                        }, INVISIBLE_TIME)
                    }
                }
            })
        }

        adapter.submitList(conversationList)
    }

    private fun getLastItemPosition(recyclerView: RecyclerView): Int {
        return (recyclerView.layoutManager as LinearLayoutManager).findLastVisibleItemPosition()
    }

    private fun slideDownAnimation() {
        val slideDown: Animation = AnimationUtils.loadAnimation(this, R.anim.slide_down)
        binding.headerDateTextContainer.startAnimation(slideDown)
    }

    private fun slideUpAnimation() {
        val slideUp: Animation = AnimationUtils.loadAnimation(this, R.anim.slide_up)
        binding.headerDateTextContainer.startAnimation(slideUp)
    }
}
 

slide_down.xml

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1000"
        android:fromYDelta="-100%"
        android:toYDelta="100%" />
</set>
 

slide_up.xml

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1000"
        android:fromYDelta="100%"
        android:toYDelta="-100%" />
</set>
 

Кто-нибудь знает, в чем проблема с отображением даты при прокрутке пользователя, а также в анимации. Спасибо