修复横向大图滑动列表的滑动闪退

This commit is contained in:
juntao
2020-09-28 12:53:00 +08:00
parent 0e7b6bb097
commit a80419e4bd

View File

@ -18,6 +18,7 @@ import com.gh.gamecenter.entity.GameEntity
class GameImageSlideViewHolder(val binding: GameImageSlideItemBinding) : BaseRecyclerViewHolder<Any>(binding.root) {
private var mScrollListener: RecyclerView.OnScrollListener? = null
private var mLastScrolledPosition = 0
fun bindImageSlide(entity: GameEntity,
imageClickListener: View.OnClickListener,
@ -50,11 +51,13 @@ class GameImageSlideViewHolder(val binding: GameImageSlideItemBinding) : BaseRec
slideAdapter.notifyItemRangeChanged(0, slideAdapter.itemCount)
// 处理复用时的 recyclerView 偏移问题
val offset = offsetable.getOffset(adapterPosition)
if (offset == 0) {
binding.columnList.scrollToPosition(0)
} else {
binding.columnList.scrollBy(offset, offset)
if (mLastScrolledPosition != adapterPosition) {
val offset = offsetable.getOffset(adapterPosition)
if (offset == 0) {
binding.columnList.scrollToPosition(0)
} else {
binding.columnList.scrollBy(offset, offset)
}
}
}
} else {
@ -68,6 +71,7 @@ class GameImageSlideViewHolder(val binding: GameImageSlideItemBinding) : BaseRec
super.onScrollStateChanged(recyclerView, newState)
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
mLastScrolledPosition = adapterPosition
offsetable.updateOffset(adapterPosition, recyclerView.computeHorizontalScrollOffset())
}
}
@ -90,13 +94,24 @@ class GameImageSlideViewHolder(val binding: GameImageSlideItemBinding) : BaseRec
firstVisiblePosition = layoutManager.findFirstVisibleItemPosition()
}
val index = if (offset > 180 || firstVisiblePosition > 0) 180 else if (offset < 0) 30 else offset + 30
val relativeOffset = if (offset > 180 || firstVisiblePosition > 0) {
180
} else if (offset < 0) {
30
} else {
if (offset + 30 > 180) {
180
} else {
offset + 30
}
}
if (columnIconLp is ConstraintLayout.LayoutParams) {
columnIconLp.leftMargin = -(index / 4).toFloat().dip2px()
columnIconLp.leftMargin = -(relativeOffset / 4).toFloat().dip2px()
binding.columnIcon.layoutParams = columnIconLp
}
val startAlpha = index.toFloat() / 180 * 90
val startAlpha = relativeOffset.toFloat() / 180 * 90
val startColor = "#" + DrawableView.convertAlphaKey(startAlpha.toInt()) + "0C1926"
val endColor = "#" + DrawableView.convertAlphaKey(100) + "0C1926"
binding.columnBackground.background = DrawableView.getGradientDrawable(