В моем ресивере, я хочу прокрутить по позиции с анимацией. Я написал собственный LinearLayoutManager.
Вот мой код
public class CustomLayoutManager extends LinearLayoutManager {
private static final float MILLISECONDS_PER_INCH = 200f;
private Context mContext;
public CustomLayoutManager(Context context) {
super(context);
mContext = context;
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView,
RecyclerView.State state, final int position) {
LinearSmoothScroller smoothScroller =
new LinearSmoothScroller(mContext) {
@Override
public PointF computeScrollVectorForPosition
(int targetPosition) {
return CustomLayoutManager.this
.computeScrollVectorForPosition(targetPosition);
}
@Override
protected float calculateSpeedPerPixel
(DisplayMetrics displayMetrics) {
return MILLISECONDS_PER_INCH/displayMetrics.densityDpi;
}
};
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
}
Я использую этот класс вот так.
leaderBoardAdapter = new SPGamificationLeaderBoardAdapter(response.list, getContext());
leaderBoardRecyclerView.setAdapter(leaderBoardAdapter);
CustomLayoutManager layoutManager = new CustomLayoutManager(getContext());
leaderBoardRecyclerView.setLayoutManager(layoutManager);
leaderBoardRecyclerView.post(() -> {
leaderBoardRecyclerView.setHasFixedSize(true);
leaderBoardRecyclerView.setNestedScrollingEnabled(false);
leaderBoardRecyclerView.smoothScrollToPosition(10);
});
Анимация работает отлично, но smoothScrollToPosition
возвращает неправильную позицию. Может кто-нибудь объяснить мне, что не так с моим кодом?
Спасибо