Android RecyclerView 水平滚动+自动循环轮播
主要处理的地方:
1、RecyclerView中Adapter的item个人可以无限轮询.
2、RecyclerView自动滑动
3、手指按下时滑动停止,手指抬起后继续自动滑动
- public class AutoPollRecyclerView extends RecyclerView {
- private static final long TIME_AUTO_POLL = ;
- 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(, );
- 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调用的代码
- AutoPollRecyclerView mRecyclerView = (AutoPollRecyclerView) findViewById(R.id.rv_recycleView);
- List<String> list = new ArrayList<>();
- for (int i = ; i < ; ) {
- 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();
- }
Android RecyclerView 水平滚动+自动循环轮播的更多相关文章
- 非常简单的方法实现ViewPager自动循环轮播
非常简单的方法实现ViewPager自动循环轮播,见红色代码部分,其它的代码可以忽略不看. 简洁高效是我解决问题的首要出发点. package com.shuivy.happylendandreadb ...
- JS-特效 ~ 01. 事件对象、offset偏移/检测、无缝滚动、自动循环轮播图
Math.round ( ) :正书四舍五入,负数五舍六入 用定时器,先清除定时器 事件对象 event event:事件被触动时,鼠标和键盘的状态,通过属性控制 Offset:偏移,检测 1. 获取 ...
- 用jquery或js实现三个div自动循环轮播
//3个div的统一class = 'div' var index =0; //3秒轮播一次 var timer = setInterval(function(){ index = (inde ...
- 解析SwiftUI布局细节(二)循环轮播+复杂布局
前言 上一篇我们总结的主要是VStack里面的东西,由他延伸到 @ViewBuilder, 接着我们上一篇总结的我们这篇内容主要说的是下面的几点,在这些东西说完后我准备解析一下苹果在SiwftUI文档 ...
- Android高仿京东淘宝自动无限循环轮播控件的实现思路和过程
在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的实现思路和过程. 一.自定义控件属性 新建自定义控件SliderLayout继承于 ...
- Android无限循环轮播广告位Banner
Android无限循环轮播广告位Banner 现在一些app通常会在头部放一个广告位,底部放置一行小圆圈指示器,指示广告位当前的页码,轮播展示一些图片,这些图片来自于网络.这个广告位banner ...
- Android之仿京东淘宝的自动无限轮播控件
在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的思路和过程. 一.自定义控件属性 新建自定义控件SliderLayout继承于Re ...
- ios之无限 自动 图片轮播器的实现
比较之前发布的手动无限图片轮播器进行了改进.实现了自动无限轮播的功能.比较适合团购标题分类下面的轮播器功能. 实现思路: * 开启一个定时器,把操作放入消息循环池.每隔一定时间,操作执行一次. * 注 ...
- 利用jQuery实现图片无限循环轮播(不借助于轮播插件)
原来我主要是用Bootstrap框架或者swiper插件实现轮播图的功能,而这次是用jQuery来实现图片无限循环轮播! 用到的技术有:html.css.JavaScript(少).jQuery(主要 ...
随机推荐
- iOS开发实践之xib载入注意问题
xib都会addSubview加入到控制器view中时程序崩溃.错误提示: 'NSInvalidArgumentException', reason: '-[ UITapGestureRecogniz ...
- 自己定义CNN网络模型并使用caffe训练
caffe自带的例子中对mnist手写体数字训练使用的卷积神经网络是在lenet_train_test.prototxt中定义的,隐含层包含了2个卷积层,2个池化层,2个全连接层,1个激活函数层.网络 ...
- WIN32常用
//1.设置窗口大小 MoveWindow(hWnd, , , + , + , FALSE); //放在InitInstance用于设置位置与窗口大小 //传递句柄就可以绘图 //2.双缓冲绘图模式 ...
- Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 本博文介绍了MongoDB,并详细指引读者在Ubuntu下MongoDB的安装和使用.本教程在Ubuntu14.04下测试通过. 一.MongoDB介绍 MongoDB 是一个是 ...
- FPGA初学之前后仿真分析
最近在学习FPGA,感觉语言的学习到时很容易,但是由于缺乏电路图的硬件知识,所以看起来比较难懂,下面是对FPGA中仿真的一点理解,以后需要学习的地方还有很多啊. 一.使用ISE环境进行FPGA系统设计 ...
- Codeforces 723D. Lakes in Berland
解题思路: 1.dfs所有的水,顺便计数大小并判断是不是湖. 2.如果是湖,将大小和坐标存下来. 3.对湖按大小从小到大排序. 4.dfs前(湖的数量-k)个湖,用*填充这些湖. 代码: #inclu ...
- 前端换行显示,后端返回<br>
- yii2.0 利用Excel类做导入导出
1.在 common 目录下 创建一个 components 将 Classes目录(改名为PHPExcel)和PHPExcel.php 放在新创建的目录下.再在 components 下创建一个Co ...
- 配置 IntelliJ IDEA VM options
今天在使用maven build flex 项目的时候,build failure ,查看log后发现[ERROR] Java heap space. 原来是内存不够了.需要修改maven的运行时内存 ...
- Generator 简介
Generator 就是一种状态机,封装多个内部状态. 执行 Generator 函数会返回一个遍历器对象(),也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对 ...