修复横向大图滑动列表的滑动闪退
This commit is contained in:
@ -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(
|
||||
|
||||
Reference in New Issue
Block a user