主要处理的地方: 
1、RecyclerView中Adapter的item个人可以无限轮询. 
2、RecyclerView自动滑动 
3、手指按下时滑动停止,手指抬起后继续自动滑动

  1. public class AutoPollRecyclerView extends RecyclerView {
  2. private static final long TIME_AUTO_POLL = ;
  3. AutoPollTask autoPollTask;
  4. private boolean running; //标示是否正在自动轮询
  5. private boolean canRun;//标示是否可以自动轮询,可在不需要的是否置false
  6. public AutoPollRecyclerView(Context context, @Nullable AttributeSet attrs) {
  7. super(context, attrs);
  8. autoPollTask = new AutoPollTask(this);
  9. }
  10. static class AutoPollTask implements Runnable {
  11. private final WeakReference<AutoPollRecyclerView> mReference;
  12. //使用弱引用持有外部类引用->防止内存泄漏
  13. public AutoPollTask(AutoPollRecyclerView reference) {
  14. this.mReference = new WeakReference<AutoPollRecyclerView>(reference);
  15. }
  16. @Override
  17. public void run() {
  18. AutoPollRecyclerView recyclerView = mReference.get();
  19. if (recyclerView != null && recyclerView.running &&recyclerView.canRun) {
  20. recyclerView.scrollBy(, );
  21. recyclerView.postDelayed(recyclerView.autoPollTask,recyclerView.TIME_AUTO_POLL);
  22. }
  23. }
  24. }
  25. //开启:如果正在运行,先停止->再开启
  26. public void start() {
  27. if (running)
  28. stop();
  29. canRun = true;
  30. running = true;
  31. postDelayed(autoPollTask,TIME_AUTO_POLL);
  32. }
  33. public void stop(){
  34. running = false;
  35. removeCallbacks(autoPollTask);
  36. }
  37. @Override
  38. public boolean onTouchEvent(MotionEvent e) {
  39. switch (e.getAction()){
  40. case MotionEvent.ACTION_DOWN:
  41. if (running)
  42. stop();
  43. break;
  44. case MotionEvent.ACTION_UP:
  45. case MotionEvent.ACTION_CANCEL:
  46. case MotionEvent.ACTION_OUTSIDE:
  47. if (canRun)
  48. start();
  49. break;
  50. }
  51. return super.onTouchEvent(e);
  52. }
  53. }

Adapter处理:主要处理getItemCount()和数据填充的onBindViewHolder()方法

  1. public class AutoPollAdapter extends RecyclerView.Adapter<BaseViewHolder> {
  2. private final Context mContext;
  3. private final List<String> mData;
  4. public AutoPollAdapter(Context context, List<String> list) {
  5. this.mContext = context;
  6. this.mData = list;
  7. }
  8. @Override
  9. public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  10. View view = LayoutInflater.from(mContext).inflate(R.layout.item_auto_poll, parent, false);
  11. BaseViewHolder holder = new BaseViewHolder(view);
  12. return holder;
  13. }
  14. @Override
  15. public void onBindViewHolder(BaseViewHolder holder, int position) {
  16. String data = mData.get(position%mData.size());
  17. holder.setText(R.id.tv_content,data);
  18. }
  19. @Override
  20. public int getItemCount() {
  21. return Integer.MAX_VALUE;
  22. }
  23. }

最后附上Activity调用的代码

  1. AutoPollRecyclerView mRecyclerView = (AutoPollRecyclerView) findViewById(R.id.rv_recycleView);
  2. List<String> list = new ArrayList<>();
  3. for (int i = ; i < ; ) {
  4. list.add(" Item: " + ++i);
  5. }
  6. AutoPollAdapter adapter = new AutoPollAdapter(this, list);
  7. mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
  8. mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL_LIST));
  9. mRecyclerView.setAdapter(adapter);
  10. if (true) //保证itemCount的总个数宽度超过屏幕宽度->自己处理
  11. mRecyclerView.start();
  12. }

 

Android RecyclerView 水平滚动+自动循环轮播的更多相关文章

  1. 非常简单的方法实现ViewPager自动循环轮播

    非常简单的方法实现ViewPager自动循环轮播,见红色代码部分,其它的代码可以忽略不看. 简洁高效是我解决问题的首要出发点. package com.shuivy.happylendandreadb ...

  2. JS-特效 ~ 01. 事件对象、offset偏移/检测、无缝滚动、自动循环轮播图

    Math.round ( ) :正书四舍五入,负数五舍六入 用定时器,先清除定时器 事件对象 event event:事件被触动时,鼠标和键盘的状态,通过属性控制 Offset:偏移,检测 1. 获取 ...

  3. 用jquery或js实现三个div自动循环轮播

    //3个div的统一class = 'div' var index =0; //3秒轮播一次 var timer = setInterval(function(){     index = (inde ...

  4. 解析SwiftUI布局细节(二)循环轮播+复杂布局

    前言 上一篇我们总结的主要是VStack里面的东西,由他延伸到 @ViewBuilder, 接着我们上一篇总结的我们这篇内容主要说的是下面的几点,在这些东西说完后我准备解析一下苹果在SiwftUI文档 ...

  5. Android高仿京东淘宝自动无限循环轮播控件的实现思路和过程

    在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的实现思路和过程. 一.自定义控件属性 新建自定义控件SliderLayout继承于 ...

  6. Android无限循环轮播广告位Banner

     Android无限循环轮播广告位Banner 现在一些app通常会在头部放一个广告位,底部放置一行小圆圈指示器,指示广告位当前的页码,轮播展示一些图片,这些图片来自于网络.这个广告位banner ...

  7. Android之仿京东淘宝的自动无限轮播控件

    在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的思路和过程. 一.自定义控件属性 新建自定义控件SliderLayout继承于Re ...

  8. ios之无限 自动 图片轮播器的实现

    比较之前发布的手动无限图片轮播器进行了改进.实现了自动无限轮播的功能.比较适合团购标题分类下面的轮播器功能. 实现思路: * 开启一个定时器,把操作放入消息循环池.每隔一定时间,操作执行一次. * 注 ...

  9. 利用jQuery实现图片无限循环轮播(不借助于轮播插件)

    原来我主要是用Bootstrap框架或者swiper插件实现轮播图的功能,而这次是用jQuery来实现图片无限循环轮播! 用到的技术有:html.css.JavaScript(少).jQuery(主要 ...

随机推荐

  1. iOS开发实践之xib载入注意问题

    xib都会addSubview加入到控制器view中时程序崩溃.错误提示: 'NSInvalidArgumentException', reason: '-[ UITapGestureRecogniz ...

  2. 自己定义CNN网络模型并使用caffe训练

    caffe自带的例子中对mnist手写体数字训练使用的卷积神经网络是在lenet_train_test.prototxt中定义的,隐含层包含了2个卷积层,2个池化层,2个全连接层,1个激活函数层.网络 ...

  3. WIN32常用

    //1.设置窗口大小 MoveWindow(hWnd, , , + , + , FALSE); //放在InitInstance用于设置位置与窗口大小 //传递句柄就可以绘图 //2.双缓冲绘图模式 ...

  4. Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 本博文介绍了MongoDB,并详细指引读者在Ubuntu下MongoDB的安装和使用.本教程在Ubuntu14.04下测试通过. 一.MongoDB介绍 MongoDB 是一个是 ...

  5. FPGA初学之前后仿真分析

    最近在学习FPGA,感觉语言的学习到时很容易,但是由于缺乏电路图的硬件知识,所以看起来比较难懂,下面是对FPGA中仿真的一点理解,以后需要学习的地方还有很多啊. 一.使用ISE环境进行FPGA系统设计 ...

  6. Codeforces 723D. Lakes in Berland

    解题思路: 1.dfs所有的水,顺便计数大小并判断是不是湖. 2.如果是湖,将大小和坐标存下来. 3.对湖按大小从小到大排序. 4.dfs前(湖的数量-k)个湖,用*填充这些湖. 代码: #inclu ...

  7. 前端换行显示,后端返回<br>

  8. yii2.0 利用Excel类做导入导出

    1.在 common 目录下 创建一个 components 将 Classes目录(改名为PHPExcel)和PHPExcel.php 放在新创建的目录下.再在 components 下创建一个Co ...

  9. 配置 IntelliJ IDEA VM options

    今天在使用maven build flex 项目的时候,build failure ,查看log后发现[ERROR] Java heap space. 原来是内存不够了.需要修改maven的运行时内存 ...

  10. Generator 简介

    Generator 就是一种状态机,封装多个内部状态. 执行 Generator 函数会返回一个遍历器对象(),也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对 ...