在项目中,想使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); } }
|