最近项目中需要实现多行垂直滚动新闻栏,在网上搜了下,大部分都是模仿京东的单行新闻栏,也就不符合项目要求,今天突然看到一篇博文,觉得可以拿来用一用,是重写了RecyclerView实现的,重写时主要就是定义一个子线程定时scrollBy,来实现滚动效果。但是View不能无限制滚动,这里用到了一个取巧的办法。
在重写Adapter的getItemCount方法时,返回一个整型最大值,代码:
@Override
public int getItemCount() {
return Integer.MAX_VALUE;
}
在重写onBindViewHolder方法时,代码:
@Override
public void onBindViewHolder(MarqueHolder holder, int position) {
holder.tv.setText(mData.get(position%size));
}
这样就实现了无线循环滚动的效果。
在原有基础上做了一个优化,就是在滑动View的时候,禁止自动滚动,其实就是重写了onTouchEvent方法,本来是想在点击View的时候就不滚动,但是发现ACTION_DOWN、ACTION_UP不响应,想了想,RecyclerView应该是事件做了拦截,交给了item来响应,只有ACTION_MOVE响应,就加一个标志位就ok了,滑动时为false,代码:
@Override
pu