Android實(shí)現(xiàn)獲獎名單滾動效果
最近公司項(xiàng)目需要一個展示獲獎名單的效果,做完之后在此分享出來。
效果展示

思路分析
獲獎名單是一個無限滾動的效果,因此我們可以想到通過使用RecyclerView來加載無限的條目,然后通過不斷的自動向下滑動RecyclerView來實(shí)現(xiàn)這個效果,但是獲獎名單不能手動滑動因此我們需要將其滑動功能屏蔽掉。
實(shí)現(xiàn)禁止滑動的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);}//禁止手動滑動@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {return true;}}
Adapter編寫(實(shí)現(xiàn)加載無限重復(fù)數(shù)據(jù)的關(guān)鍵)
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{//這里的WinnListBean是我模擬的中獎數(shù)據(jù)private List<WinnListBean> mDatas;private Context mContext;public MyAdapter(List<WinnListBean> mDatas, Context mContext) {this.mDatas = mDatas;this.mContext = mContext;}@NonNull@Overridepublic MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {View view = LayoutInflater.from(mContext).inflate(R.layout.item_winnlist,null,false);return new MyViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {WinnListBean winnListBean = mDatas.get(i % mDatas.size());//獲取重復(fù)數(shù)據(jù)myViewHolder.itemWinnlistTvPhone.setText(winnListBean.getPhone());myViewHolder.itemWinnlistTvPrize.setText(winnListBean.getPrize());}@Overridepublic int getItemCount() {// 本案例一頁最多顯示6條數(shù)據(jù),因此設(shè)置如果數(shù)據(jù)數(shù)量大于6等于6才開始滾動if(mDatas.size()>5){// 展示無限數(shù)據(jù)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);}}}
實(shí)現(xiàn)自動滾動
這里的自動滾動是使用的RecyclerView的smoothScrollBy()方法結(jié)合Handler來實(shí)現(xiàn)的。
mHandler=new Handler();mRunnable = new Runnable() {@Overridepublic void run() {//RecyclerView每隔200毫秒向下滾動一次mRecyclerView.smoothScrollBy(0,5);mHandler.postDelayed(this,200);}};mHandler.post(mRunnable);
源碼地址:
https://gitee.com/itfitness/WinnListDemo
到這里就結(jié)束啦
評論
圖片
表情
