我想为片段的onViewCreated()
之后的回收者视图设置动画。
为此,我使用以下代码:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
recyclerView.post{
recyclerView.translationY = recyclerView.height.toFloat()
recyclerView.animate()
.translationY(0F)
.alpha(1F)
.setInterpolator(DecelerateInterpolator())
.setDuration(1000)
.start()
}
}
还有我的RecyclerView.Adapter:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val currentItem = items[position]
with(holder.itemView) {
txtFirstName.text = currentItem.firstName
txtLastName.text = currentItem.lastName
doAsync {
val drawable = ResourcesCompat.getDrawable(context.resources, currentItem.avatarId, null)
uiThread {
ivAvatar.setImageDrawable(drawable)
}
}
}
}
问题::当Adapter完成对前12个项目的调用onBindViewHolder()
时,动画将冻结。所以我的动画开始,然后冻结约300ms,然后继续。
问题:是否可以在其他线程上运行该动画,或者我的操作有问题?
我认为没有更多的事情可以提高RecyclerView的性能(我已经实现了adapter.sethasStableIds(true)
和getItemId()
,而我的onBindViewHolder()
也很简单)
UPD::我已经尝试使用xml动画(带有AnimationUtils.loadAnimation()
),带有View.animate()
的运行时动画,ValueAnimator,ObjectAnimator以及FragmentTransaction.setCustomAnimations()。一切似乎都有相同的结果