Android实现获奖名单滚动效果

龙旋

共 2774字,需浏览 6分钟

 · 2021-03-01

最近公司项目需要一个展示获奖名单的效果,做完之后在此分享出来。


效果展示



思路分析

获奖名单是一个无限滚动的效果,因此我们可以想到通过使用RecyclerView来加载无限的条目,然后通过不断的自动向下滑动RecyclerView来实现这个效果,但是获奖名单不能手动滑动因此我们需要将其滑动功能屏蔽掉。


实现禁止滑动的RecyclerView

public class MyRecyclerView extends RecyclerView {    public MyRecyclerView(Context context) {        this(context,null);    }
public MyRecyclerView(Context context, @Nullable AttributeSet attrs) { this(context, attrs,0); }
public MyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } //禁止手动滑动 @Override public boolean dispatchTouchEvent(MotionEvent ev) { return true; }}


Adapter编写(实现加载无限重复数据的关键)

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{    //这里的WinnListBean是我模拟的中奖数据    private List<WinnListBean> mDatas;    private Context mContext;
public MyAdapter(List<WinnListBean> mDatas, Context mContext) { this.mDatas = mDatas; this.mContext = mContext; }
@NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(mContext).inflate(R.layout.item_winnlist,null,false); return new MyViewHolder(view); }
@Override public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) { WinnListBean winnListBean = mDatas.get(i % mDatas.size());//获取重复数据 myViewHolder.itemWinnlistTvPhone.setText(winnListBean.getPhone()); myViewHolder.itemWinnlistTvPrize.setText(winnListBean.getPrize()); } @Override public int getItemCount() {// 本案例一页最多显示6条数据,因此设置如果数据数量大于6等于6才开始滚动 if(mDatas.size()>5){// 展示无限数据 return Integer.MAX_VALUE; }else { return mDatas.size(); } } static class MyViewHolder extends RecyclerView.ViewHolder{ private TextView itemWinnlistTvPhone; private TextView itemWinnlistTvPrize; public MyViewHolder(@NonNull View itemView) { super(itemView); itemWinnlistTvPhone = (TextView) itemView.findViewById(R.id.item_winnlist_tv_phone); itemWinnlistTvPrize = (TextView) itemView.findViewById(R.id.item_winnlist_tv_prize); } }}


实现自动滚动

这里的自动滚动是使用的RecyclerView的smoothScrollBy()方法结合Handler来实现的。

mHandler=new Handler();        mRunnable = new Runnable() {            @Override            public void run() {                //RecyclerView每隔200毫秒向下滚动一次                mRecyclerView.smoothScrollBy(0,5);                mHandler.postDelayed(this,200);            }        };mHandler.post(mRunnable);


源码地址:

https://gitee.com/itfitness/WinnListDemo


到这里就结束啦


点击这里留言交流哦


浏览 71
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报