Android 【实现自动轮询的RecycleView】

Android 【实现自动轮询的RecycleView】

需求:类似医院或者商场,大屏幕无限轮播item (广告词/广告图…)

代码如下

/** * Created by Xia_焱 on 2017/8/20. */

public class AutoPollRecyclerView extends RecyclerView {
   
    private static final long TIME_AUTO_POLL = 32;
    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);
    }
}

开启:如果正在运行,先停止->再开启

  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中的代码如下

    @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中的代码

  mRecyclerView.setAdapter(adapter);
        if (true) //保证itemCount的总个数宽度超过屏幕宽度->自己处理
            mRecyclerView.start();

[希望这篇文章可以帮到你]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2826.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • callable线程使用_java线程结束用什么方法

    callable线程使用_java线程结束用什么方法接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返

    2025年8月21日
    3
  • sqlserver临时表详解_怎么把临时表的数据更新到正式表

    sqlserver临时表详解_怎么把临时表的数据更新到正式表[转自]http://zhengweisincere.blog.163.com/blog/static/498446492009625749522/在SQLServer的性能调优中,有一个不可比面的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择。记得在给一家国内首屈一指的海运公司作SQLServer应用性能评估和调优的时候就看到过

    2022年8月21日
    4
  • Java泛型深入理解「建议收藏」

    Java泛型深入理解「建议收藏」Java泛型,包括Java泛型的实现,泛型擦除以及相关面试题,通配符理解

    2022年6月23日
    18
  • 数据分析统计

    数据分析统计

    2021年5月10日
    157
  • perl文件句柄_perl文件句柄信号引用

    perl文件句柄_perl文件句柄信号引用perl哈希操作# 文件句柄,标准文件句柄有STDINSTDOUTSTDERRDATAARGVARGVOUT# 建立名字为TEXTFILE的文件句柄,<表示读文件openTEXTFILE,”<“,”a.txt”;while(<TEXTFILE>){print$_;}closeTEXTFILE;#openTEXTFILE1,”>”,”b.txt”;#>表示写文件,如果文件不存在,则会创建文件,输入文字覆盖原

    2022年10月18日
    2
  • async的基本用法「建议收藏」

    async的基本用法「建议收藏」1.async函数的基本形式2.async函数的返回值总是一个Promise无论async函数有无await操作,其总是返回一个Promise。1.没有显式return,相当于return

    2022年6月30日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号