没有找到这个方法,看源码中好像也没有设置,自己继承重写了 moveSpinnerInfinitely 方法,如下:
@Override
protected void moveSpinnerInfinitely(float spinner) {
if (mState == RefreshState.TwoLevel && spinner > 0) {
// 上拉距离
float pullUpDistance = getMeasuredHeight() - spinner;
// 设置阻尼效果
float newSpinner = spinner + pullUpDistance * mDragRate;
mKernel.moveSpinner(Math.min((int) newSpinner, getMeasuredHeight()), true);
} else {
super.moveSpinnerInfinitely(spinner);
}
}
但是发现产生了其他的问题,在多指连续触摸上滑的时候,上面方法回调的 spinner 会在屏幕中间的时候为 0,从而导致淘宝二楼返回一楼的时候,卡在中间。
2条答案
按热度按时间9njqaruj1#
找到原因了,因为 mDragRate 设置的 0.5,因为阻尼效果,在滑动到屏幕一半的时候,就滑不动了。阻尼效果写的有问题。
5kgi1eie2#
看了作者写的阻尼效果,有一个公式:y = M(1-100^(-x/H))
请问 M、H、x 代表什么意思呢?