SideBarView
SideBarView copied to clipboard
解决字母栏触摸滑动和RecyclerView滚动冲突
问题说明:手指触摸滑动使RecyclerView滚动,RecyclerView滚动触发onitemScrollUpdateText方法中的invalidate();,会导致两个invalidate();方法通知出发,反复刷新,使字母导航选中字母跳动。 解决:增加一个标记,在触摸字母栏的时候,RecyclerView滚动调用invalidate();方法 //标记是否是按住 1. private boolean isDown = false; 2.
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
int index = (int) (event.getY() / getHeight() * mList.length);
if (index >= 0 && index < mList.length) {
if (mClickListener != null) {
mClickListener.onSideBarScrollUpdateItem(mList[index]);
}
mSelectIndex = index;
invalidate();
//改变标记状态
isDown = true;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if (mClickListener != null) {
mClickListener.onSideBarScrollEndHideText();
//改变标记状态
isDown = false;
}
break;
}
return true;
}```
3.
`public void onitemScrollUpdateText(String word) {
//手指没触摸才调用
if (!isDown) {
for (int i = 0; i < mList.length; i++) {
if (mList[i].equals(word) && mSelectIndex != i) {
mSelectIndex = i;
invalidate();
}
}
}
}`
单个字母也会多次刷新回调,将:
if (index >= 0 && index < mList.length)
换成:
if (index >= 0 && index < mList.length && mSelectIndex != index)
已更 1.0.1