前言
在android
开发过程中,我们经常会用到列表控件RecyclerView
,而与RecyclerView
相关的又会涉及很多监听。为了方便使用,我封装了一个RecyclerView
的滑动监听类RecycleScrollListener
,其可以监听RecyclerView
的是否滑动,滑动位置(是否在顶部,是否在底部),滑动方向(向上,向下滑动)。那么下面就让我们来了解下RecycleScrollListener
的使用吧。
今天涉及以下内容:
-
RecycleScrollListener
监听讲解
1.1 监听是否滑动
1.2 监听是否滑动到列表 顶部/底部
1.3 监听是否 向上/向下 滑 -
RecycleScrollListener
在Activity
中的使用 - 效果图和项目结构图
-
RecycleScrollListener
源码
先来波效果图
一. RecycleScrollListener 监听讲解
RecycleScrollListener
作为一个RecyclerView
的监听类,可以监听RecyclerView
是否滑动,滑动位置(顶部/底部),滑动方向(向上/向下),下面来一次讲解。
1.1 监听是否滑动
监听RecyclerView
是否滑动可以像下面这样处理:
RecycleScrollListener scrollListener=new RecycleScrollListener();
//是否滑动监听
scrollListener.setOnScrollStateListener(new RecycleScrollListener.OnScrollStateListener() {
@Override
public void scrollState(boolean isScrolling) {
if(isScrolling){
ToastUtil.shortShow("正在滑动");
LogUtil.i("======正在滑动======");
}else{
ToastUtil.shortShow("未滑动");
LogUtil.i("======未滑动======");
}
}
});
mRecyclerView.addOnScrollListener(scrollListener);
1.2 监听是否滑动到列表 顶部/底部
监听RecyclerView
是否滑动到列表顶部/底部 可以类似下面这样:
RecycleScrollListener scrollListener=new RecycleScrollListener();
//滑动位置监听
scrollListener.setOnScrollPositionListener(new RecycleScrollListener.OnScrollPositionListener() {
@Override
public void scrollPosition(int position) {
switch (position) {
case RecycleScrollListener.SCROLL_TOP:
ToastUtil.shortShow("顶部");
LogUtil.i("====顶部====");
break;
case RecycleScrollListener.SCROLL_BOTTOM:
ToastUtil.shortShow("底部");
LogUtil.i("====底部====");
break;
default:
// ToastUtil.shortShow("非顶部和底部的位置");
// LogUtil.i("====非顶部和底部的位置====");
break;
}
}
});
mRecyclerView.addOnScrollListener(scrollListener);
1.3 监听是否 向上/向下 滑
监听列表是否 向上/向下 滑,可以像下面这样操作:
RecycleScrollListener scrollListener=new RecycleScrollListener();
//滑动方向监听
scrollListener.setOnScrollDirectionListener(new RecycleScrollListener.OnScrollDirectionListener() {
@Override
public void scrollUp(int dy) {
ToastUtil.shortShow("向上滑");
LogUtil.i("====向上滑====");
}
@Override
public void scrollDown(int dy) {
ToastUtil.shortShow("向下滑");
LogUtil.i("====向下滑====");
}
});
mRecyclerView.addOnScrollListener(scrollListener);
二. RecycleScrollListener 在 Activity 中的使用
下面给出RecycleScrollListener
在 Activity
中使用的样例:
package com.testdemo.example_ui;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.testdemo.R;
import com.testdemo.other.MyAdapter;
import com.testdemo.other.RecycleScrollListener;
import com.util.LogUtil;
import com.util.ToastUtil;
import java.util.ArrayList;
import java.util.List;
/**
* Title:测试界面
* description:
* autor:pei
* created on 2020/6/2
*/
public class TempActivity extends AppCompatActivity implements View.OnClickListener{
private TextView mTv;
private Button mBtn1;
private RecyclerView mRecyclerView;
private MyAdaptermyAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);
//初始化控件
initView();
//初始化数据
initData();
//设置监听
setListener();
}
/**初始化控件**/
private void initView(){
mTv=findViewById(R.id.tv);
mBtn1=findViewById(R.id.btn1);
mRecyclerView=findViewById(R.id.rv);
}
/**初始化数据**/
private void initData(){
Listlist=new ArrayList<>();
for (int i = 0; i < 30; i++) {
list.add("测试数据 "+i);
}
myAdapter=new MyAdapter<>(TempActivity.this,list);
LinearLayoutManager layoutManager = new LinearLayoutManager(TempActivity.this);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(myAdapter);
RecycleScrollListener scrollListener=new RecycleScrollListener();
// //是否滑动监听
// scrollListener.setOnScrollStateListener(new RecycleScrollListener.OnScrollStateListener() {
// @Override
// public void scrollState(boolean isScrolling) {
// if(isScrolling){
// ToastUtil.shortShow("正在滑动");
// LogUtil.i("======正在滑动======");
// }else{
// ToastUtil.shortShow("未滑动");
// LogUtil.i("======未滑动======");
// }
// }
// });
// //滑动位置监听
// scrollListener.setOnScrollPositionListener(new RecycleScrollListener.OnScrollPositionListener() {
// @Override
// public void scrollPosition(int position) {
// switch (position) {
// case RecycleScrollListener.SCROLL_TOP:
// ToastUtil.shortShow("顶部");
// LogUtil.i("====顶部====");
// break;
// case RecycleScrollListener.SCROLL_BOTTOM:
// ToastUtil.shortShow("底部");
// LogUtil.i("====底部====");
// break;
// default:
//// ToastUtil.shortShow("非顶部和底部的位置");
//// LogUtil.i("====非顶部和底部的位置====");
// break;
// }
// }
// });
//滑动方向监听
scrollListener.setOnScrollDirectionListener(new RecycleScrollListener.OnScrollDirectionListener() {
@Override
public void scrollUp(int dy) {
ToastUtil.shortShow("向上滑");
LogUtil.i("====向上滑====");
}
@Override
public void scrollDown(int dy) {
ToastUtil.shortShow("向下滑");
LogUtil.i("====向下滑====");
}
});
mRecyclerView.addOnScrollListener(scrollListener);
}
/**设置监听**/
private void setListener(){
mBtn1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1://测试
LogUtil.i("=======测试=======");
test();
break;
default:
break;
}
}
/**测试**/
private void test(){
}
}
三. 效果图和项目结构图
四. RecycleScrollListener 源码
下面给出RecycleScrollListener
源码: