Каков наилучший способ автоматической прокрутки к верхней части окна рециркуляции после удара по нижней части? - PullRequest
0 голосов
/ 04 июля 2019

Я создаю приложение для Android, которое отображает переработчик карт. Я реализовал функцию автоматической прокрутки как часть моего менеджера линейной компоновки, которая будет плавно переходить к последнему элементу в представлении реселлера.

Я бы хотел, чтобы список вернулся к началу обзора переработчика, как только он обнаружит, что последний элемент видим.

Вот код для моего собственного менеджера компоновки.

public class ScrollLayoutManager extends LinearLayoutManager {

    private static final float MILLISECONDS_PER_INCH = 10000f; //default is 25f (bigger = slower)

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

    public ScrollLayoutManager(Context context, int orientation, boolean reverseLayout) {
        super(context, orientation, reverseLayout);
    }

    public ScrollLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

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

        final LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) {

            @Override
            public PointF computeScrollVectorForPosition(int targetPosition) {
                return super.computeScrollVectorForPosition(targetPosition);
            }

            @Override
            protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
                return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
            }
        };
        linearSmoothScroller.setTargetPosition(position);
        startSmoothScroll(linearSmoothScroller);
    }
}

1 Ответ

0 голосов
/ 04 июля 2019

Возможно, вы захотите присоединить RecyclerView.OnScrollListener ( документы ) к вашему RecyclerView и переопределить onScrolled() и использовать либо findLastCompletelyVisibleItemPosition() ( документы ), либо findLastVisibleItemPosition() ( Документы ), в зависимости от ваших потребностей, в сочетании с getItemCount() ( Документы ), чтобы проверить, если вы нажмете последний элемент, а затем прокрутите обратно наверх.

...