RecyclerView实用-打造自动循环的RecyclView
来源:互联网 发布:淘宝可以改实名认证吗 编辑:程序博客网 时间:2024/06/05 11:56
- 先看效果图
- 主要处理的地方:
- RecyclerView中Adapter的item可以无限轮询.
- RecyclerView自动滑动
- 手指按下时滑动停止,手指抬起后继续自动滑动
public class AutoPollRecyclerView extends RecyclerView {
private static final long TIME_AUTO_POLL = 16;
AutoPollTask autoPollTask;
private boolean running; //标示是否正在自动轮询
private boolean canRun;//标示是否可以自动轮询,可在不需要的是否置false
public AutoPollRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
autoPollTask = new AutoPollTask(this);
}
static class AutoPollTask implements Runnable {
private final WeakReference<AutoPollRecyclerView> mReference;
//使用弱引用持有外部类引用->防止内存泄漏
public AutoPollTask(AutoPollRecyclerView reference) {
this.mReference = new WeakReference<AutoPollRecyclerView>(reference);
}
@Override
public void run() {
AutoPollRecyclerView recyclerView = mReference.get();
if (recyclerView != null && recyclerView.running &&recyclerView.canRun) {
recyclerView.scrollBy(2, 2);
recyclerView.postDelayed(recyclerView.autoPollTask,recyclerView.TIME_AUTO_POLL);
}
}
}
//开启:如果正在运行,先停止->再开启
public void start() {
if (running)
stop();
canRun = true;
running = true;
postDelayed(autoPollTask,TIME_AUTO_POLL);
}
public void stop(){
running = false;
removeCallbacks(autoPollTask);
}
@Override
public boolean onTouchEvent(MotionEvent e) {
switch (e.getAction()){
case MotionEvent.ACTION_DOWN:
if (running)
stop();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_OUTSIDE:
if (canRun)
start();
break;
}
return super.onTouchEvent(e);
}
}
- Adapter处理:主要处理getItemCount()和数据填充的onBindViewHolder()方法
public class AutoPollAdapter extends RecyclerView.Adapter<BaseViewHolder> {
private final Context mContext;
private final List<String> mData;
public AutoPollAdapter(Context context, List<String> list) {
this.mContext = context;
this.mData = list;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_auto_poll, parent, false);
BaseViewHolder holder = new BaseViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(BaseViewHolder holder, int position) {
String data = mData.get(position%mData.size());
holder.setText(R.id.tv_content,data);
}
@Override
public int getItemCount() {
return Integer.MAX_VALUE;
}
}
- 最后附上Activity调用的代码
public class AutoPollRecyclerActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auto_poll);
initToolBar();
initView();
}
private void initView() {
AutoPollRecyclerView mRecyclerView = (AutoPollRecyclerView) findViewById(R.id.rv_recycleView);
List<String> list = new ArrayList<>();
for (int i = 0; i < 5; ) {
list.add(" Item: " + ++i);
}
AutoPollAdapter adapter = new AutoPollAdapter(this, list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL_LIST));
mRecyclerView.setAdapter(adapter);
if (true) //保证itemCount的总个数宽度超过屏幕宽度->自己处理
mRecyclerView.start();
}
}
推荐一款不错的GIF图片制作软件:LICEcap
0 0
- RecyclerView实用-打造自动循环的RecyclView
- RecyclerView实用-打造自动循环的RecyclView
- Android-->打造无限循环的RecyclerView
- 封装 RecyclerView, 打造为一个非常实用的开发工具 , 添加一些开发中常用的功能 , 例如下拉刷新, 分页, 自动加载 , 加载错误等等
- Recyclview复杂布局的实现
- 打造无限自动循环viewpager
- 打造RecyclerView的通用适配器
- 打造 RecyclerView的 通用Adapter
- 打造RecyclerView的万能适配器
- Diffutils打造不一样的recyclerview
- android 打造真正的下拉刷新上拉加载recyclerview(四):自动加载和其他封装
- android 打造真正的下拉刷新上拉加载recyclerview(四):自动加载和其他封装
- 打造一个实用的Ubuntu
- 打造实用的Fedora 10
- 打造一个实用的Ubuntu
- RecyclerView 水平滚动+自动循环轮播
- 打造通用的RecyclerView的Adapter
- RecyclerView系列之一:打造RecyclerView通用的适配器BaseAdapter
- 使用NOPI做Excepl导入导出
- 二维码生成
- Java正则表达式——验证手机号和电话号码
- 设计模式-创建型模式:原型模式PrototypeModel
- js获取当前时间前一周时间前一个月时间
- RecyclerView实用-打造自动循环的RecyclView
- Android自定义View的实现方法,带你一步步深入了解View(四)
- java dwr配置
- 反射输出helloworld
- chromedriver与GOOGLE浏览器对应版本
- Gradle多渠道打包以及混淆配置总结
- Spring框架打印机实例
- 用委托实现插件式编程
- 找出member表中,username字段 中以@p结尾的用户名的项