recycleview实现拼多多首页水平滑动效果

本文实例为大家分享了recycleview实现拼多多首页水平滑动效果的具体代码,供大家参考,具体内容如下

1.说明  本例子模仿拼多多首页的水平菜单,原本计划用viewpager实现,但是太麻烦,不合适,尝试用recycleview实现,亲测可运行,自定义支持各种样式效果,高度扩展

2.效果图:

3.下载地址

4.首页 贴一下核心代码  需要源码的请自行下载

/*

* 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; //设置行数

private int mColumns = 4; //设置列数

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 = {"多多果园","九块九特卖","多多爱消除","天天领现金"

,"行家帮你选","限时秒杀","断码清仓","跟着好评买"

,"充值中心","医药馆","签到","多多赚大钱"

,"砍价免费拿","多多精灵","省钱月卡","现金大转盘"

};

@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);

// 系统带的 RecyclerView,无需自定义

mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);

// 水平分页布局管理器

mLayoutManager.setPageListener(this); // 设置页面变化监听器

mRecyclerView.setLayoutManager(mLayoutManager);

// 如果需要查看调试日志可以设置为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", "总页数 = " + pageSize);

}

@Override

public void onPageSelect(int pageIndex, int pageSize) {

mCurrent = pageIndex;

Log.e("TAG", "选中页码 = " + pageIndex + "\t" + pageSize);

//计算滚动条宽度

float proportion = (float) ((pageIndex + 1) / pageSize);

float transMaxRange = lineParent.getWidth() - lineChild.getWidth();

//设置滚动条移动

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);

}*/

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 recycleview实现拼多多首页水平滑动效果 的全部内容, 来源链接: utcz.com/p/243591.html

回到顶部