RecyclerCoverFlow icon indicating copy to clipboard operation
RecyclerCoverFlow copied to clipboard

CoverFlowLayoutManger中mSlectPositon计算存在bug

Open WhySRZ opened this issue 4 years ago • 2 comments

CoverFlowLayoutManger中mSlectPositon计算存在bug private void onSelectedCallBack() { mSelectPosition = Math.round (mOffsetAll / getIntervalDistance()); mSelectPosition = Math.abs(mSelectPosition % getItemCount()); if (mSelectedListener != null && mSelectPosition != mLastSelectPosition) { mSelectedListener.onItemSelected(mSelectPosition); } mLastSelectPosition = mSelectPosition; }

当mSelectPositon为负数时,会出现位置对不上,比如我有5个条目,当mSelectPosition为-6,Math.abs(mSelectPosition % getItemCount())计算结果为1,但事实对应的条目应该是4,当mSelectPosition为负数时正确的位置计算应该为应为 mSelectPosition = 条目个数和(list.size())+mSelectPosition % getItemCount()

WhySRZ avatar Jun 11 '20 08:06 WhySRZ

list.size())+mSelectPosition % getItemCount()

牛逼,但是还有一种偶现情况 为负数的时候,计算完mSelectPosition =getItemCount(),此时应该置位0,还需要再优化。 image

zt80hou avatar Sep 18 '21 06:09 zt80hou

/** * 计算当前选中位置,并回调 */ private void onSelectedCallBack() { mSelectPosition = Math.round(mOffsetAll / getIntervalDistance()); Log.e("mSelectPosition", "mSelectPosition = " + mSelectPosition); if (mSelectPosition < 0) { mSelectPosition = getItemCount() + mSelectPosition % getItemCount(); } else { mSelectPosition = Math.abs(mSelectPosition % getItemCount()); } if (mSelectPosition == getItemCount()) {// 偶现相等 Log.e("mSelectPosition", "偶现相等 "); mSelectPosition = 0; } if (mSelectedListener != null && mSelectPosition != mLastSelectPosition) { mSelectedListener.onItemSelected(mSelectPosition); } mLastSelectPosition = mSelectPosition; }

zt80hou avatar Sep 18 '21 06:09 zt80hou