#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>
Кто-нибудь знает, в чем проблема с отображением даты при прокрутке пользователя, а также в анимации. Спасибо