下面列出了androidx.recyclerview.widget.RecyclerView#canScrollVertically ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (mScrollingListener == null) {
return;
}
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
if (!recyclerView.canScrollVertically(1)) {
//是否能向下滚动,false 表示已经滚动到底部
mScrollingListener.onScrollDown(recyclerView);
} else if (!recyclerView.canScrollVertically(-1)) {
//是否能向上滚动,false 表示已经滚动到顶部
mScrollingListener.onScrollTop(recyclerView);
}
} else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
//正在滚动中
mScrollingListener.onScrolling(recyclerView);
}
}
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
onScroll();
if (!recyclerView.canScrollVertically(RecyclerView.FOCUS_DOWN)) {
onEnd();
resetScrollDistance();
} else {
if (mScrolledDistance < -HIDE_THRESHOLD) {
onScrollUp();
resetScrollDistance();
}
}
if ((dy < 0)) {
mScrolledDistance += dy;
}
}
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
onScroll();
if (!recyclerView.canScrollVertically(RecyclerView.FOCUS_DOWN)) {
onEnd();
resetScrollDistance();
} else {
if (mScrolledDistance < -HIDE_THRESHOLD) {
onScrollUp();
resetScrollDistance();
}
}
if ((dy < 0)) {
mScrolledDistance += dy;
}
}
public static List<Photo> loadMore(PagerViewModel<Photo> viewModel, int currentCount,
PagerView pagerView, RecyclerView recyclerView,
PagerManageView pagerManageView, int pagerIndex) {
if (pagerManageView != null && pagerManageView.canLoadMore(pagerIndex)) {
pagerManageView.onLoad(pagerIndex);
}
if (!recyclerView.canScrollVertically(1)
&& pagerManageView != null && pagerManageView.isLoading(pagerIndex)) {
pagerView.setSwipeLoading(true);
}
if (currentCount >= viewModel.getListSize()) {
return new ArrayList<>();
}
return subList(viewModel, currentCount, viewModel.getListSize());
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
void handleDragScroll(RecyclerView rv, DragInfo dragInfo) {
if (rv.getLayoutManager().canScrollHorizontally()) {
if (rv.canScrollHorizontally(-1) && dragInfo.shouldScrollLeft()) {
rv.scrollBy(-SCROLL_AMOUNT, 0);
dragManager.clearNextMove();
} else if (rv.canScrollHorizontally(1) && dragInfo.shouldScrollRight(rv.getWidth())) {
rv.scrollBy(SCROLL_AMOUNT, 0);
dragManager.clearNextMove();
}
} else if (rv.getLayoutManager().canScrollVertically()) {
if (rv.canScrollVertically(-1) && dragInfo.shouldScrollUp()) {
rv.scrollBy(0, -SCROLL_AMOUNT);
dragManager.clearNextMove();
} else if (rv.canScrollVertically(1) && dragInfo.shouldScrollDown(rv.getHeight())) {
rv.scrollBy(0, SCROLL_AMOUNT);
dragManager.clearNextMove();
}
}
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
if (recyclerView.canScrollVertically(-1)) {
if (toolbarShadow.getVisibility() != View.VISIBLE) {
ViewUtil.fadeIn(toolbarShadow, 250);
}
} else {
if (toolbarShadow.getVisibility() != View.GONE) {
ViewUtil.fadeOut(toolbarShadow, 250);
}
}
}
@OnTouch(R.id.recycler_view)
boolean onTouchRecyclerView(RecyclerView view, MotionEvent event) {
boolean isRecyclerViewOnTop = !view.canScrollVertically(-1);
float currentY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d(TAG, "onTouchRecyclerView: down");
// Toast.makeText(getContext(),"Down",Toast.LENGTH_SHORT).show();
mFirstTouchEvent = true;
view.onTouchEvent(event);
if(isRecyclerViewOnTop) mLayerController.streamOnTouchEvent(mRoot,event);
break;
case MotionEvent.ACTION_UP:
Log.d(TAG, "onTouchRecyclerView: up");
mFirstTouchEvent = false;
mPreviousY = 0;
if(mInStreamEvent) {
mInStreamEvent = false;
mLayerController.streamOnTouchEvent(mRoot, event);
}
view.onTouchEvent(event);
break;
default:
Log.d(TAG, "onTouchRecyclerView: "+event.getAction());
if(mPreviousY<currentY&&isRecyclerViewOnTop) mInStreamEvent = true;
if(mInStreamEvent) mLayerController.streamOnTouchEvent(mRoot,event);
else view.onTouchEvent(event);
mFirstTouchEvent = false;
}
mPreviousY = currentY;
return true;
}
/**
* Launches an app based on RecyclerView scroll state.
*
* @param activity The activity for context reference.
* @param recyclerView The RecyclerView itself.
* @param adapter A FlexibleAdapter with App items.
*/
public static void keyboardLaunchApp(Activity activity, RecyclerView recyclerView, FlexibleAdapter<App> adapter) {
if (recyclerView.canScrollVertically(RecyclerView.FOCUS_UP)) {
AppUtils.launchApp(activity, Utils.requireNonNull(
adapter.getItem(0)));
} else if (!recyclerView.canScrollVertically(RecyclerView.FOCUS_DOWN)) {
AppUtils.launchApp(activity, Utils.requireNonNull(
adapter.getItem(adapter.getItemCount() - 1)));
}
}
/**
* Launches an app based on RecyclerView scroll state.
*
* @param activity The activity for context reference.
* @param recyclerView The RecyclerView itself.
* @param adapter A FlexibleAdapter with App items.
*/
public static void keyboardLaunchApp(Activity activity, RecyclerView recyclerView, FlexibleAdapter<App> adapter) {
if (recyclerView.canScrollVertically(RecyclerView.FOCUS_UP)) {
AppUtils.launchApp(activity, Utils.requireNonNull(
adapter.getItem(0)));
} else if (!recyclerView.canScrollVertically(RecyclerView.FOCUS_DOWN)) {
AppUtils.launchApp(activity, Utils.requireNonNull(
adapter.getItem(adapter.getItemCount() - 1)));
}
}
public static void onScrolled(BothWaySwipeRefreshLayout refreshLayout,
RecyclerView recyclerView, int realItemCount,
@Nullable PagerManageView pagerManageView, int index, int dy) {
if (recyclerView.getLayoutManager() == null) {
return;
}
int[] lastVisibleItems = null;
if (recyclerView.getLayoutManager() instanceof StaggeredGridLayoutManager) {
lastVisibleItems = ((StaggeredGridLayoutManager) recyclerView.getLayoutManager())
.findLastVisibleItemPositions(null);
} else if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
lastVisibleItems = new int[] {((GridLayoutManager) recyclerView.getLayoutManager())
.findLastVisibleItemPosition()};
} else if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
lastVisibleItems = new int[] {((LinearLayoutManager) recyclerView.getLayoutManager())
.findLastVisibleItemPosition()};
}
if (lastVisibleItems == null || lastVisibleItems.length == 0) {
return;
}
if (pagerManageView != null && pagerManageView.canLoadMore(index)
&& lastVisibleItems[lastVisibleItems.length - 1] >= realItemCount - ListPager.DEFAULT_PER_PAGE
&& realItemCount > 0
&& dy > 0) {
pagerManageView.onLoad(index);
}
if (!recyclerView.canScrollVertically(1)
&& pagerManageView != null && pagerManageView.isLoading(index)) {
refreshLayout.setLoading(true);
}
}
/**
* Returns, whether a specific recylcer view is scrolled to the bottom, or not.
*
* @param recyclerView The recycler view as an instance of the class {@link RecyclerView}. The
* recycler view may not be null
* @return True, if the given recycler view is scrolled to the bottom, false otherwise
*/
private boolean isRecyclerViewScrolledToBottom(@NonNull final RecyclerView recyclerView) {
return !recyclerView.canScrollVertically(1);
}
/**
* Returns, whether a specific recylcer view is scrolled to the top, or not.
*
* @param recyclerView The recycler view as an instance of the class {@link RecyclerView}. The
* recycler view may not be null
* @return True, if the given recycler view is scrolled to the top, false otherwise
*/
private boolean isRecyclerViewScrolledToTop(@NonNull final RecyclerView recyclerView) {
return !recyclerView.canScrollVertically(-1);
}