From a80419e4bd7458dccac47862c2ae5e403f33a646 Mon Sep 17 00:00:00 2001 From: juntao Date: Mon, 28 Sep 2020 12:53:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A8=AA=E5=90=91=E5=A4=A7?= =?UTF-8?q?=E5=9B=BE=E6=BB=91=E5=8A=A8=E5=88=97=E8=A1=A8=E7=9A=84=E6=BB=91?= =?UTF-8?q?=E5=8A=A8=E9=97=AA=E9=80=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imageslide/GameImageSlideViewHolder.kt | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/gh/gamecenter/game/imageslide/GameImageSlideViewHolder.kt b/app/src/main/java/com/gh/gamecenter/game/imageslide/GameImageSlideViewHolder.kt index d5407a1e5c..962848dc82 100644 --- a/app/src/main/java/com/gh/gamecenter/game/imageslide/GameImageSlideViewHolder.kt +++ b/app/src/main/java/com/gh/gamecenter/game/imageslide/GameImageSlideViewHolder.kt @@ -18,6 +18,7 @@ import com.gh.gamecenter.entity.GameEntity class GameImageSlideViewHolder(val binding: GameImageSlideItemBinding) : BaseRecyclerViewHolder(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(