自动RecyclerView滚动

时间:2018-05-08 06:11:16

标签: android android-recyclerview

我试图在我的应用中实施一个与广告横幅的工作方式类似的横幅广告,每隔几秒就会滚动到下一个广告。我希望它是动态的,所以我使用了RecyclerView,我使用snap helper将它水平放置以获得很好的效果。然而,它是我挣扎的自动滚动,我需要它在几秒钟之后滚动到下一张卡片,当它到达结束时滚动回到第一张并重新开始。

我也看到人们为此谈论了一个viewflipper,但是我从来没有使用过它,也不确定它是否会产生预期的效果。

2 个答案:

答案 0 :(得分:1)

首先,像这样创建一个TimerTask类,

  private class ScrollTask extends TimerTask {
                public void run() {
                recyclerview.post(new Runnable() {
                    public void run() {

                        int nextView = (adapter.getAdapterPosition() + 1) % adapter.getItemCount()

                       recyclerView.smoothScrollToPosition(nextView);    
                    }
                });
            }
        }

然后创建一个计时器对象

Timer timer = new Timer();

并安排这样的任务,

timer.schedule(new ScrollTask(), interval // delay before task is to be executed,
 interval //period between successive task executions.)

interval是整数,包含以毫秒为单位的时间

答案 1 :(得分:1)

所以我尝试了很多方法来解决这个问题。首先,我尝试了@ Ganesh的答案,我修改后才能开始工作。对于那些感兴趣的人就是我做的,

首先创建一个计时器对象,以及计划我延迟创建的计时器任务。

Timer timer = new Timer();
timer.scheduleAtFixedRate(new AutoScrollTask(), 2000, 5000);

计时器任务使用arraylist来计算它的当前位置,当它到达结尾时它只是保留,以避免突然跳转到第一个项目。

private class AutoScrollTask extends TimerTask{
        @Override
        public void run() {
            if(position == arrayList.size() -1){
                end = true;
            } else if (position == 0) {
                end = false;
            }
            if(!end){
                position++;
            } else {
                position--;
            }
            recyclerView.smoothScrollToPosition(position);
        }
    }

这种方法确实存在缺陷,为什么我采用了@Tam Huynh的建议并研究了ViewFlipper。在这种情况下,我使用了AdapterViewFlipper。 这允许我构建一个自定义适配器,我可以根据我收到的数据动态添加视图。