在项目中,想使RecyclerView慢慢的平缓滑动指定位置,于是使用:

1
RecyclerView.smoothScrollToPosition(int);

发现效果并不理想,滑动过程很突兀,很快就滑动到了指定位置,并没有像函数名那样smooth(流畅的,平滑的),也就是说smoothScrollToPosition没有滑动效果?
这里接不说底层原理了,网上一大把!

#####解决办法 重写LinearLayoutManager自定义滑动速度:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.LinearSmoothScroller;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;

/**
* Created by tyl
* 2018/12/19/019
* Describe:解决 RecyclerView调用smoothScrollToPosition时没有起到平滑的作用
* 设置LinerLayoutManager:recyclerview.setLayoutManager(new SmoothScrollLayoutManager(this));
*recyclerview.smoothScrollToPosition(i);
*/

public class SmoothScrollLayoutManager extends LinearLayoutManager {

public SmoothScrollLayoutManager(Context context) {
super(context);
}

@Override
public void smoothScrollToPosition(RecyclerView recyclerView,
RecyclerView.State state, final int position) {

LinearSmoothScroller smoothScroller =
new LinearSmoothScroller(recyclerView.getContext()) {
// 返回:滑过1px时经历的时间(ms)。
@Override
protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
return 150f / displayMetrics.densityDpi;
}
};
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
}