1. Android實(shí)現(xiàn)獲獎名單滾動效果

        共 2774字,需瀏覽 6分鐘

         ·

        2021-03-01 13:15

        最近公司項(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); } //禁止手動滑動 @Override public 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 @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());//獲取重復(fù)數(shù)據(jù) myViewHolder.itemWinnlistTvPhone.setText(winnListBean.getPhone()); myViewHolder.itemWinnlistTvPrize.setText(winnListBean.getPrize()); } @Override public 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() {            @Override            public void run() {                //RecyclerView每隔200毫秒向下滾動一次                mRecyclerView.smoothScrollBy(0,5);                mHandler.postDelayed(this,200);            }        };mHandler.post(mRunnable);


        源碼地址:

        https://gitee.com/itfitness/WinnListDemo


        到這里就結(jié)束啦


        點(diǎn)擊這里留言交流哦


        瀏覽 109
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
          
          

            1. 欧美成人三级视频 | 黄色AV免费在线观看 | 亚洲AV成人片无码网站 | A级毛片高清不卡视频免费观看 | 大胸少妇秘书给局长喂奶 |