android快速翻到底部,Android Studio - 第四十三期 RecyclerView存在大量Item时,当滚到底部时快速滑到顶部...

本文介绍了一个自定义的FastScrollManger类,用于RecyclerView在滚动到底部时平滑、流畅地返回顶部。通过监听RecyclerView的滚动状态和位置,动态控制顶部按钮的显示与隐藏,确保用户体验。使用自定义的LinearSmoothScroller来控制滚动速度,避免卡顿现象。同时,给出了代码示例,展示了如何在布局管理器中应用这个类以及监听滚动和点击事件。
摘要由CSDN通过智能技术生成

在使用RecyclerView展示图片或者其他信息时,往往需要展示很多的Item,当滚到底部时又想回到顶部,如果一点一点的向上划去比较麻烦,而且用户体验不好。因此添加一个快速回到顶部的按钮是很有必要的,并且刚开始的时候这个按钮是隐藏的,当滑动超过超过一屏的时候才会出现,在滑动的过程中也是不会出现的。很多类似的项目都会使用到,但是如何在快速回到顶部的过程中不出现卡顿,体现的很是流畅,这点很重要。下面是我根据网上的方法自己修改的一个可以快速回到顶部的类,在此做一下备注,以便日后查看:

1.FastScrollManger.javaimport android.content.Context;

import android.graphics.PointF;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.LinearSmoothScroller;

import android.support.v7.widget.RecyclerView;

import android.util.DisplayMetrics;

/**

* 快速回到RecyclerView 的顶部,不会出现卡顿

*/

public class FastScrollManger extends LinearLayoutManager {

public FastScrollLinearLayoutManager(Context context) {

super(context);

}

public FastScrollLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {

super(context, orientation, reverseLayout);

}

@Override

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

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

@Override

public PointF computeScrollVectorForPosition(int targetPosition) {

return FastScrollLinearLayoutManager.this.computeScrollVectorForPosition(targetPosition);

}

//控制速度。

@Override

protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {

return super.calculateSpeedPerPixel(displayMetrics);

}

@Override

protected int calculateTimeForScrolling(int dx) {

if (dx > 3000) {

dx = 3000;

}

int time = super.calculateTimeForScrolling(dx);

return time;

}

};

linearSmoothScroller.setTargetPosition(position);

startSmoothScroll(linearSmoothScroller);

}

}

2.使用mRecyclerView = (RecyclerView) findViewById(R.id.activity_recyclerview);

LinearLayoutManager layout = new FastScrollManager(CustomActivity.this, LinearLayoutManager.VERTICAL, false);

mRecyclerView.setLayoutManager(layout);//竖直放置        ...

mRecyclerView.setAdapter(mMyAdapter);

mRecyclerView.addOnScrollListener(new MyRecyclerViewScrollListener());

3.控制显示与隐藏//滑动监听

private class MyRecyclerViewScrollListener extends RecyclerView.OnScrollListener {

@Override

public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

super.onScrollStateChanged(recyclerView, newState);

LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();

int firstVisibleItemPosition = manager.findFirstVisibleItemPosition();

// 当不滚动时

if (newState == RecyclerView.SCROLL_STATE_IDLE) {

// 判断是否滚动超过一屏

if (firstVisibleItemPosition == 0) {

mImageViewRebackTop.setVisibility(View.INVISIBLE);

} else {

mImageViewRebackTop.setVisibility(View.VISIBLE);

}

} else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {//拖动中

mImageViewRebackTop.setVisibility(View.INVISIBLE);

}

}

}

4.点击回到顶部按钮的时候,回到顶部mRecyclerView.smoothScrollToPosition(0);

附:执着的念想~

69f933e0bb802399bf9a67e006b20e78.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值