溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

recycleview如何實(shí)現(xiàn)拼多多首頁(yè)水平滑動(dòng)效果

發(fā)布時(shí)間:2021-05-27 10:19:20 來(lái)源:億速云 閱讀:420 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)recycleview如何實(shí)現(xiàn)拼多多首頁(yè)水平滑動(dòng)效果的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

本文實(shí)例為大家分享了recycleview實(shí)現(xiàn)拼多多首頁(yè)水平滑動(dòng)效果的具體代碼,供大家參考,具體內(nèi)容如下

1.說(shuō)明  本例子模仿拼多多首頁(yè)的水平菜單,原本計(jì)劃用viewpager實(shí)現(xiàn),但是太麻煩,不合適,嘗試用recycleview實(shí)現(xiàn),親測(cè)可運(yùn)行,自定義支持各種樣式效果,高度擴(kuò)展

2.效果圖:

recycleview如何實(shí)現(xiàn)拼多多首頁(yè)水平滑動(dòng)效果

3.下載地址

4.首頁(yè) 貼一下核心代碼  需要源碼的請(qǐng)自行下載

/*
 * Copyright 2017 GcsSloop
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Last modified 2017-09-18 23:47:01
 *
 * GitHub: https://github.com/GcsSloop
 * WeiBo: http://weibo.com/GcsSloop
 * WebSite: http://www.gcssloop.com
 */
 
package com.example.mepositry;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;
 
 
import java.util.ArrayList;
import java.util.List;
 
public class TwoActivity extends AppCompatActivity implements PagerGridLayoutManager
        .PageListener {
 
    private int mRows = 2;  //設(shè)置行數(shù)
    private int mColumns = 4;  //設(shè)置列數(shù)
    private RecyclerView mRecyclerView;
    private MyAdapter2 mAdapter;
    private PagerGridLayoutManager mLayoutManager;
    private RelativeLayout lineParent;
    private int mTotal = 0;
    private int mCurrent = 0;
    private View lineChild;
    private String[] names = {"多多果園","九塊九特賣(mài)","多多愛(ài)消除","天天領(lǐng)現(xiàn)金"
            ,"行家?guī)湍氵x","限時(shí)秒殺","斷碼清倉(cāng)","跟著好評(píng)買(mǎi)"
            ,"充值中心","醫(yī)藥館","簽到","多多賺大錢(qián)"
            ,"砍價(jià)免費(fèi)拿","多多精靈","省錢(qián)月卡","現(xiàn)金大轉(zhuǎn)盤(pán)"
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        lineParent = findViewById(R.id.rl_line_parent);
        lineChild = findViewById(R.id.view_line_child);
        mLayoutManager = new PagerGridLayoutManager(mRows, mColumns, PagerGridLayoutManager
                .HORIZONTAL);
        // 系統(tǒng)帶的 RecyclerView,無(wú)需自定義
        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        // 水平分頁(yè)布局管理器
        mLayoutManager.setPageListener(this);    // 設(shè)置頁(yè)面變化監(jiān)聽(tīng)器
        mRecyclerView.setLayoutManager(mLayoutManager);
        // 如果需要查看調(diào)試日志可以設(shè)置為true,一般情況忽略即可
        PagerConfig.setShowLog(true);
        initData();
 
    }
 
    private void initData() {
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 16; i++) {
            list.add(names[i]);
        }
        //   mAdapter.refreshDataList(list);
        // 使用原生的 Adapter 即可
        mAdapter = new MyAdapter2(TwoActivity.this, list);
        mRecyclerView.setAdapter(mAdapter);
    }
 
    @Override
    public void onPageSizeChanged(int pageSize) {
        mTotal = pageSize;
        Log.e("TAG", "總頁(yè)數(shù) = " + pageSize);
    }
 
    @Override
    public void onPageSelect(int pageIndex, int pageSize) {
        mCurrent = pageIndex;
        Log.e("TAG", "選中頁(yè)碼 = " + pageIndex + "\t" + pageSize);
        //計(jì)算滾動(dòng)條寬度
        float proportion = (float) ((pageIndex + 1) / pageSize);
        float transMaxRange = lineParent.getWidth() - lineChild.getWidth();
        //設(shè)置滾動(dòng)條移動(dòng)
        lineChild.setTranslationX(transMaxRange * proportion);
    }
}

5.適配器

/**
 * Copyright 2017 GcsSloop
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Last modified 2017-09-18 23:47:01
 *
 * GitHub: https://github.com/GcsSloop
 * WeiBo: http://weibo.com/GcsSloop
 * WebSite: http://www.gcssloop.com
 **/
 
package com.example.mepositry;
 
 
import android.annotation.SuppressLint;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import java.util.ArrayList;
import java.util.List;
 
public class MyAdapter2 extends RecyclerView.Adapter<BaseRecyclerViewHolder> {
    private List<String> mDataList = new ArrayList<>();
    private Context context;
 
    public MyAdapter2(Context mContext, List<String> list) {
        this.context=mContext;
        this.mDataList = list;
    }
 
 
    @Override
    public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_item2, parent, false);
        return new BaseRecyclerViewHolder(view);
    }
 
    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(BaseRecyclerViewHolder holder, final int position) {
        TextView name = holder.findBindItemView(R.id.tv_title);
        name.setText("id:"+position+mDataList.get(position));
        //抽象方法
        name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("TAG", "holder.itemView:" + position);
            }
        });
    }
 
    @Override
    public int getItemCount() {
        return mDataList.size();
    }
 
/*    @Override
    protected int setupItemLayoutId() {
        return ;
    }
    @Override
    protected void findBindView(int position, BaseRecyclerViewHolder holder) {
        String data = mDataList.get(position);
        TextView name = holder.findBindItemView(R.id.tv_title);
        name.setText(data);
    }*/
}

感謝各位的閱讀!關(guān)于“recycleview如何實(shí)現(xiàn)拼多多首頁(yè)水平滑動(dòng)效果”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI